Make Games, Not Engines?

Started by
46 comments, last by CadetUmfer 15 years, 1 month ago
OK, let me clarify what I just wrote above. This is from my experience of working on my personal 'pet' 'backyard' project.

When I started the personal 3D Engine Wrapper project, I only had this MFC template project in front of me. My thoughts were I would stack-build the first few bricks right here. So I did, I wrote classes around the generic MFC template. And that took some time, though. I kept adding more code until I got some functionality in, like loading from .obj and .mtl files. VBOs were defined so that the polygons got loaded in there. And so are the material subsystem were created as well.

Up to that point I was trying to get a render, and I did. The model got loaded into the VBO and the materials loading and rendering as well. When I saw the render I was stunned because Fraps was telling me FPS was right there at 60 FPS. Whoaaa! That's awesome for a start.

Once I got that working, I decided to split the code, this is the part where I had to carefully pick-out code that went to the Lib module. That took some work and effort on where exactly the split was. And when the smoke cleared, I finally got a solution file with two projects in there, the first was the Win32 project and the second was the Win32 Library project. Now, I'm happy because I got the engine where I want it to be.

I'm sure some developers will say it's too early to make the split. To me, though, I would do it exactly at the milestone which is basically carving the Engine right when you get the first render. From there, an Engine is now born, two codebase entirely going in its own direction.

Want to see the proof? Click the link below and download the project. See for yourself.
Advertisement
Whew! I made it all the way through the thread in one sitting....

Seems there are a lot of guys(gals?) all sitting at home making engines. I wonder what would happen if y'all got together and worked on the SAME engine?
Quote:Original post by electricdragon
Whew! I made it all the way through the thread in one sitting....

Seems there are a lot of guys(gals?) all sitting at home making engines. I wonder what would happen if y'all got together and worked on the SAME engine?

You would have a lot of conflict, disagreement, chaos, and ultimately nothing would get done. It be more wasted effort than just having the separate entities work on their own separate engines.

As you can see there is already significant disagreement of the "fluff" behind the word "engine", so you can't expect multiple people to work on the same project when multiple definitions, specifically conflicting, and multiple views are in place.
Denzel Morris (@drdizzy) :: Software Engineer :: SkyTech Enterprises, Inc.
"When men are most sure and arrogant they are commonly most mistaken, giving views to passion without that proper deliberation which alone can secure them from the grossest absurdities." - David Hume
I have written half a dozen terrain engines and never approached anything like a game. I am a good technical programmer and do what I do because I enjoy it. I never seriously expect to write a game by myself and I don't care. The day I want to write a game, I'll get a grant, buy a license to TorqueX 3D and hire a sweat shop of artists. I'd just end up being a small business manager and salesman. Think I'll stick with the engines thanks.
Again, you seem to have missed the intent or the article; if you want to play around with technology then feel free. But if you want to make a game the logical first step is to make a game, not make an engine.

If you split your code base and develop an 'engine' while making a game then also fine, mostly because you have a test bed and something to drive the engine features. Apply YAGNI as required [smile]
A thread topic after my own heart! Its only been the past month or so since "I have seen the light". Too many years "wasted" on trying to come up with the perfect engine required to make the game. Was it wasted? Well perhaps not completely. I did learn a lot of things along the way. Necessary things to make a game.

Recently I have completely changed my focus. Its a constant struggle for my type of personality to just leave it alone and not make it more perfect. Its not even close to being perfect in the first place. My focus now is on the game. And the "engine" will simply fall out of the process of meeting objectives the game requires. No one will see my code and you know what, if the game is decent, no one will care about my code. They won't care whether I created the faster and most efficient array container or just used std::vector.

Code reuse? Well go for it and spend some time on design and implementation but as for me at some point I am saying, "Enough!". Ok so it may not be reusable for the "next game". So what! I bet you I'll spend less time on a re-do loop splicing in or completely re-doing previously done code for the next game than some who insists on spending days making the perfect, reusable algorithm or class. I've seen it happen too often.

In my past experience with making games for contests I've found that those games that actually got to a point where they were considered somewhat done were those where I made a decision ahead of time NOT to make the engine first, but instead to focus on making the game play. ALL others found themselves in the typical dust collecting sub-directories, partially finished prototypes. Oh, but hey, when I was traversing down the proverbial "rabbit hole" working on some cool feature I learned something. Hmmm. Didn't even come close to finishing a game, but heck, I learned something or maybe even created some feature for the "next game". Ever creating the feature for the next game but never finishing a game.


Well I love to see other like-minded fellows struggling along with me. I think some great comments were made.


Regards,
Steve
Taking too much on your pitchfork is ussually what happens when thinking about a super engine that can do Super Mario Bros, Halflife4 and Flight Simulator at the same time. On the other hand, at school we learned its good to make several layers of abstraction. Instead of coding a very specific application, you'd first make a more abstract structure(-> 'engine'). Then use it later for the final (specific) part. Coding right away on the game itself feels bad, dirty, and it does happen that an additional feature doesn't fit in the puzzle later on. But I agree with those saying that coding an (big) engine ussually results in nothing... because its simply too much work! And if you ever finish it, its probably outdated already.

I made that mistake as well, several times. Although it also had to do with my skills. Bad engines lead to even worse products in the end. But luckily I learned from my faults, so each attempt to create a new engine gets better.

Currently I'm doing it a little bit different. I don't focus on the final game, and neither on an universal engine. Instead I focus on a sandbox kinda like editor. Just as important as the engine, are the tools. I'm making a big editor that can do every task that is finally needed in the game (materials, shaders, sound, scripting, models, mapping, and rendering). I have a relative simple demo scene in mind that I like to make with my editor, and I add its required features to the editor step by step. But instead of adding them quick & dirty, I'll put them in a nice abstract engine structure, with optional future features in my mind. Thanks to all the failed attempts in the past I finally know a little bit howto do it :) Ow, and for the real game-specific such as AI, events or game mechanics, I reserve scripts. This way it keeps flexible.


So, I'm building the engine and the editor, plus actual game content at the same time. I found out this works motivating. Which is extremely important if you're planning an ambitious (>2/4 years development) game. Creating editors is ussually boring, but now I can actually play something in my editor with nice graphics and gameplay == motivating. Creating an engine on itself without testing it in practice might not be a good idea either, but yet again, via the editor and some maps the engine keeps getting tested in practice.

Just keep in mind what you actually want to do. Skip the engine if you just want to make a fun game in a relative short time. If you plan a big game with lots of features, you'll probably gonna need an engine. Lot's of things can change in 2 or 3 years (especially with graphics), so you might need to keep the rendering system flexible. But don't try to make a super engine that is capable of everything... It's a waste of time.

Greetings,
Rick
When I'm trying to solve problems I haven't solved before, I keep my abstractions as shallow as possible. As the complexity (and my understanding of the problem) increases, I'll add abstractions. I'm always thinking about how to better abstract things, but I don't until I need to.

There's nothing worse than building a nice tower of abstraction, only to find you didn't fully understand the problem domain, and you have to hack and fight your abstractions, or tear them down and rebuild.
Anthony Umfer

This topic is closed to new replies.

Advertisement