How come many of you prefer to make games from scratch rather than use an engine?

Started by
24 comments, last by YucelKaramanli 11 years, 3 months ago

So my main question is that why alot of you use API/libraries like directx/opengl/sfml/allegro/sdl/xna and etc to make games rather than use an engine like unity/udk/troque? Doest using an engine make game dev a lot more streamlined and easier than using an api? What are your reasons?

Advertisement

Depends on the size of the game, and the requirements.

I'm making a 2D tile-based RPG. SFML is just as good for that as Unity or UDK or Torque would be, since those three engines aren't geared towards the type of game I'm making.

Further, making it "from scratch" (building ontop of SFML which is built ontop Win32 and OpenGL, so not really from scratch at all) provides educational benefit as well.

Using an engine is really great. For most 2D games, however, building off of a 2D API like SDL/Allegro/XNA/SFML would probably be better.

Making your own (non-2D) engine, except for educational experience or just for fun, is probably counter-productive to the end-goal of completing a game.

SFML 2, is awesome and Object Oriented, SDL, Allegro, and many other popular 2D libraries are not Object Oriented. SFML2 is super easy to use. Free for commercial use or any other use, and is open source. ( Grab a nightly of 2.0 on the forums, there is one for vs11 )

The reason people choose to roll their own, is often because they want complete control over what happens in the code, and/or to really learn about how stuff works at a low level, and/or to optimize at a low level.

If you always use engines, or even libraries, you won't learn the low level stuff that happens. A quick example is collision detection, its really easy to call a function to do it for you, but writing your own detection systems, for things like rotated boxes, circles, and ellipses will grant you invaluable experience and knowledge. Then you can think outside the box because you truly understand these things.

If this post or signature was helpful and/or constructive please give rep.

// C++ Video tutorials

http://www.youtube.com/watch?v=Wo60USYV9Ik

// Easy to learn 2D Game Library c++

SFML2.2 Download http://www.sfml-dev.org/download.php

SFML2.2 Tutorials http://www.sfml-dev.org/tutorials/2.2/

// Excellent 2d physics library Box2D

http://box2d.org/about/

// SFML 2 book

http://www.amazon.com/gp/product/1849696845/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=1849696845&linkCode=as2&tag=gamer2creator-20

Well made point, Eddie. Its the same reason im using allegro rather than an engine. Keep posting your reasons people!

It really depends on what you like to do.

If you like to design a game and want a finished product, go ahead and use an engine.

In my case, what I really like is to code. When you code from scratch, from time to time, challenges appear that you were not expecting. It's an awesome feeling when you get over those problems (and you usually learn a lot).

Sure, the game might look like crap, but I don't really care as far as I had fun doing it and learned something in the process. smile.png

(Note: This might not apply if you are working in a professional environment tongue.png )

NIH

I'm super angry that I have to use stuff like DirectX and FMOD. I'd prefer ASSUMING DIRECT CONTROL.

lol

No, my reasoning is pretty much identical to JD557's.

void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

I thought programming was a game!

. . . but seriously: I never use a game engine. Following is why.

Game engines get in the way of what I want to do more often than they save me work, and they consistently still somehow fail to do things I need them to do. "I don't care that there's a material for a bloom shader; I want the FBOs you used to do it!" When I want to try a new algorithm, or do something no one thought of before, I don't want to be trapped in the framework some programmer thought would be all I'd ever need. No one can anticipate what anyone else will eventually want to write, so modern game engines, invariably never playing gracefully with outside code, hurt me.

Game engines, particularly proprietary ones--though open-source too due to the nature of the number of people working on them--almost always aren't up to my specifications of intuition. I am a perfectionist, and by nature I constantly tweak things down to the point where I spend an afternoon rewriting something just because its design isn't completely bulletproof and intuitive. I like my APIs to be obvious to use, robust, and powerful.

First, there should be at most one built-in way to do something, and it should be the best way--not different ways for different cases, different ways depending on context, hidden ways, and so on. I don't need four different ways to do something simple. It should be obvious, just by guessing, what the API does, and there should be one way it does it, if it does it at all.

Similarly, there's a point where the benefits of abstraction are overwhelmed by the cost of understanding it. I don't want to have to read pages and pages of documentation just to do something simple. In the best projects, documentation serves as a clarification and shortcut guide for advanced users--not an indispensable prerequisite for newbies.

Second, any internal software development is an exercise in balancing abstraction with power. Game engines fall far too heavily in the former for me. I can never do things the most efficient (or even reasonably efficient) way.

On a related topic, game engines tend to be bloated and hard to understand. Take the Bullet Physics Engine (which is actually a library). It's great: it works well, it's fast, and it is the de facto standard for physics engines—open source and proprietary. It's also horrific to read. As a newcomer, try reverse engineering some of the examples. It's next to impossible to just jump right in and start using it. I know that Physics simulation is not easy, but 4 megs of source is only justified if it's easy to understand and easy to use. Bullet is neither.

Analogously, this is in fact one of the things I personally oppose in the software industry: Parkinson's Law of Data, and a general lack of concern for system resources. Modern games ship with gigabytes of data, much of it never used. Why? Part of it is just that games are getting better, but a lot of it is due to wasteful game engines and content production pipelines. True, it's very easy to add new assets, but you lose a lot of value when you need a custom IDE or content management system to make sense of it all.

Game engines are often expensive or impose licensing restrictions. The last thing I want is to write something and then find out that 10% of my income from it goes to the game engine, or that I have to release my code under the BSD Revised Unported Attribution Commercial Software License rev.238b or suffer the consequences. Libraries have the same issue, but less so.

Perhaps the best argument, though, is the joke I opened with: programming is a game, and I for one find it amusing to write more powerful software with less code. Someone else might need a $500 license to use a game engine, but I derive joy from writing something faster and more elegant from scratch, even if it means I have to remake some wheels.

As an important clarification to my above points, I remind you that game engines and libraries are distinct. While I never use game engines, I almost ALWAYS use libraries. I can't get around the cruft of things like OpenGL (and the greater cruft of Direct3D) without doing drastic things like writing drivers for every graphics card ever. Similarly, there's sense in using things like SDL, wx, or QT, because no one wants to write a cross-platform windowing toolkit/system (except those guys, apparently).

But, in keeping with the above points, I try to choose libraries that are small, fast, and extensible--and when that's not an option, I almost always end up using a very small subset of the function calls available. Finally, when all else fails, I write a pretty API that exposes all the power of a library with the cleanliness I expect--doing this is only possible with lower-level libraries, and in fact I do, it seems, gravitate toward those.

The largest library I use is the code that I personally have written over the years. My OpenGL library can do everything the graphics component of a professional 3D game engine can do (or can, with a bit of code; it's designed to be more like a series of foundation classes than a plug-and-play sort of game-making-algorithm), yet it's comparatively tiny.

I'll concede that my strategy of making better wheels where bad ones already exist doesn't work to churn out games. I've noticed that I find place(s) for at least minor improvement whenever I try to use any library, and I spend more time than I should improving the library instead of actually making the application based off it. But, maybe this just tells me that I'm more of a researcher than a developer. I don't know.

On the opposite spectrum, I recently successfully released a number of small Python/PyGame games by just rewriting everything from scratch each time, and refusing to use any base code. Naturally, this doesn't scale past small applications like that.

So personally, for me:

  • Libraries that you occasionally call into are good, but only if they are well-designed. Otherwise, try not to use them, acknowledging however that sometimes using a bad library is a necessary evil.
  • Avoid game engines like the plague.

[size="1"]And a Unix user said rm -rf *.* and all was null and void...|There's no place like 127.0.0.1|The Application "Programmer" has unexpectedly quit. An error of type A.M. has occurred.
[size="2"]

I enjoy coding. It's fun and a passion. I understand you still must code when using a game engine, however it's generally very high level and a lot more simple than code I would write when I'm developing without an engine.

If I start making Three-Dimensional games and I need to push out a large product quickly with a team, of course I will use Unity, however I work alone (As of now) and am making Two-Dimensional Games. As I've detailed in other posts of mine, I actually use Construct Two for prototyping. It's easy to drag and drop some placeholder art, write some quick HTML5 / JavaScript, and make a small prototype for a game Mechanic. If it's fun, I'll try to go ahead and program the game myself.

Learning how to program using a Game Engine doesn't seem very good to me (Unless you're an artist). Many programmers I've seen who learned to code with an engine write painfully slow and pointless code. I learned how to use C++, and waited a year before jumping into Graphics. I'm still learning different quirks surrounding the language and exploring C++11, however the experience I gained from learning a language and not an API / Engine is helpful and an underlying reason why I enjoy programming. I understand peoples code, and it's an amazing feeling. Actually being a coder makes me feel accomplished, and every time I spend a few days working on a problem / fixing a problem, I get an amazing sense of accomplishment.

The community for many Game Engines reflects many of my points. On the Unity forums, far too many (Even the well respected) of the programmers learned with Unity, and as a result, are not as helpful had it been a low-level programmer who had joined one of the teams on the forums. They don't normally write efficient code, and don't understand what their code does besides what they know from Unity. This isn't helped by the fact that the forums are barraged with teenagers trying to recruit actual game developers for their new "Zombie-MMO-DayZ however Better-FPS". I'd say about half of the community is twelve year old's. I should link you to a post (Albeit old) from a group of twelve year old's who had promised their school they would make an MMO (bigger than World-Of-Warcraft) and were looking for a team to make the MMO for them.

I respect the developers on the Unity Asset Store however. They are some of the most hard-working programmers I've seen and they make amazing software. It's no wonder that many of them work as programmers at larger studios (I've seen some from the likes of Electronic-Arts) or use lower-level API's.

I believe using an Engine is smart if you understand how the Engine works. This is the main reason why I'm learning OpenGL. I want to understand. I constantly read about Security (Security+), New programming languages, design patterns, practices, Books on new languages (and current languages). Understanding is important to me. I felt a feeling of "This is all to big for me to understand" when I started. There's just so much, it's hard to sort through it all.

Wow, that was a rant tongue.png! Cheers :)!

I'm a game programmer and computer science ninja !

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here !

couple of years ago , at the beginning of our current project we did experiment with Unity. At the beginning we were all happy, the artists were happy because they had their nice environment to work with shaders, illumination and what not, I was happy looking forward to a relaxing development year full with lots of vacations and no graphics programming involved.

After a couple of months, the pretty picture started to fall apart.. loading time went biblical (>60 seconds), shadow quality wasn't good enough and untweakable for our needs, the entire working pipeline was VERY different (I wouldn't say bad.. but way different) from what we were used to, motion blur was more like LSD-acid effect. Luckily I had a DX11 pet engine that I was working on for fun and one sunday, for fun I imported the track and car we were developing as example in, and got the thing loaded in 7 seconds with the shadows just as I needed... after a couple of meeting with the entire team, Unity was out of the window, and my holidays were canceled tongue.png

I look forward to the day I will be able to pick up an engine and be able to use it for my work.. it is the proper, sane and smart thing to do. Sadly, for the moment, we're not there yet for the kind of projects I do. But, if I were to start a new project tomorrow, my first move would be to check out a 3rd party engine first and evaluate if that could be of any use.

Stefano Casillo
TWITTER: [twitter]KunosStefano[/twitter]
AssettoCorsa - netKar PRO - Kunos Simulazioni

I use directx on top of win32 and that is because I just want to learn things. So I'm making my own engine atm. But if I would in the situation, that I just want to ship some "little" game for mobile or tablet to market, I think I would use an engine. Would save a lot of time.

Awhile ago I read a little column, that many of finnish game companies are using Unity at the moment because they can concentrate more on developing contents of the game rather than adjusting the engine. And they are choosing Unity because it's quite easy to use. I also used Unity engine when we made networking game project in our school and it's really easy to use. Quite many finnish game companies, which are perhaps start-up companies or beginning companies have some nice idea so they just want that idea as fast as possible to market. Developing an engine would cost money and they couldn't concentrate on the original idea hence they have to develope the engine for it. But that's not what everybody does, but it seems that majority though.

See my game dev blog: http://gamedev4hobby.blogspot.fi/

This topic is closed to new replies.

Advertisement