Introduction

Published September 19, 2014
Advertisement
Hello,

my name is Juli(e)an, and this is the introduction to my journal about how insane I am to develope my own game engine. Some of you might have seen me before on the forums, mainly (solely) on the technical topics. Or you don't, but thats OK too. I have just been developing this kind of large project for the past one and a half year, and finally decided to share my doings, outside of the frequent snippets, when I search for help in the forums.

So let me give you a little backstory about me. Don't worry, future posts will be more technically, but I've just got to get this out of the way. Its going to be a long, but hopefully not boring monoloque. I don't blame you if you skip it or loose interest in the middle, its pretty much my programming-oriented biography in a nutshell. So off we go:

I've always dreamed of being a game-dev. I literally wanted to develope games since the first video game I ever played, back in the SNES area. Or did I start with Pokemon for Gameboy? I don't really remember exactly what was first, but I already started making scetches of levels for all my favourite games on paper. It was only few years later that I got my own home PC (I was about 10 years old), and I got used to that system. It was ever few years later that I finally decided to take things more seriously. I got my first C++ programming book when I was about 14 years old. It was a perfect beginners book, it only featured console programming and the C++ basics. I still lost track when it started with OOP. Man, was this stuff confusing back then. But I was relatively young, so it was more than understandable. I was still proud of what I was able to make (command-line calculators, small command-line games) back then, but I decided to postpone the whole game-developing thingy for a few more years.

So two more passed by, and one day I had a pretty strong dream (literally) about my favourite games of all times, Terranigma. I always wanted to make a sequel to this game so badly, and now that idea manifested in my head and didn't want to let go. So I made a few failed attempts at learning C++ in more depth. Then I realised that these attempts where flawed. There were tools already out there that did the job for me - I decided to go with the Rpg-Maker XP, that was back in 2008. I had a steep learning curve - after playing only with the event-system of the maker about one and a half year, I started to learn Ruby (their scripting language). That was when I finally understood OOP, at least from the Ruby-side. Nevertheless, this experience would help me to properly learn C++ in the near future.

But wait, you might say, didn't I just talk about how I had this strong game idea that I wanted to get done, and that I was already working on in a game engine? What am I bothering with C++ again? Well, there is more to this. At one point, using other peoples engines/scripts always kind of felt like cheating to me. There is no rationale to that, and I can't explain it, but thats the way I felt. Also, I noticed in the process of learning to apply ruby scripting in the maker that I always felt a little more drawn to the technical parts than I did to the game-design itself. Truly, my coding/scripting skills back then were horrible, but it was so fascinating getting complex stuff to work, morever so being things that the game-dev community (at least that I followed) deemed "impossible".

Don't get me wrong, I still really enjoyed making that game itself, but I just realized what my future lies in. I wanted to learn as much "hardcore"-programming as possible. So for my highschool graduation work, I wanted to make a "real" game, in c++ with directx. It was actually kind of foolish and all-in: I had to learn OOP with C++, graphics developement, and use those skills to develope a (technical) full game alongside with writing a paper of about 7000 words about the topic "game developement in OOP with C++". I also set up for a Super-Mario World clone - the wary reader might remember that I hadn't programmed any full game yet. So it was just an extremely risky task, and my future kind of depended on it - failure would hinder my further plans of studying. So quess what? It just worked out. I threw in so much time, but I got everything done as I planed, and passed with flying colours. I also learned pretty much all that I hoped for in the process, so it was basically a full success.

But then I wanted to expand the game. I only had a very limited amount of enemies, items, etc... . And I just noticed that I could not. I just had created a working system, but in such a way that it could not be extented without my sanity fleeing in the process. My code was still pretty horrible, even for myself to work with. The project was about 17k LoC, and 2k alone were part of an ungoldy god-player class. Mind if I spare you the rest of the story? I pretty much left the project as it was. It was finished per definition, but not in any way that I wanted it. So there went this then, I continued to develope my Terranigma 2 in the Rpg-Maker, but no more C++ for some time.

Lo and behold, after some more time passing, I had another weird inspirational dream that lit another spark that I didn't even knew existed: You know the game cursed mountain? It wasn't all that great, and I hadn't played it back then, but I've seen a trailer... just one time btw, but this dream, filled with symbols of buddhism and that trailer just planted another though into my mind: I've got to do something like that too. So obviously 3D was my next goal. Keep in mind, I still was more interested in making technical, than content-related progress, so using an external tool was out of the question. By the way, I have virtually no artistic skills. I designed some pretty neat levels using existing graphics for my Terranigma-sequel, but I'm still only able to create basic 2d-icons, and no 3d content. So my only way at living my dream was to program my own 3d application.

And there I went again: I started learning 3d-programming, using DX9 again, from scratch. I also wanted to take a little more care about designing my application this time - I didn't want to be stuck after a few months again. Long story short - it failed again. Oh, I learned quite a few things about 3d rendering - I had things like HDR, SSAO, shadows etc... up and running after some time, but the application after all was such a pain in the *ss to extend after some time, I had to leave it at that again.

You know what annoyed me the most about all these failures? Not that it failed, I quess thats to be expected if you are talking this route, going from 0 to 100 with c++ in only 2 projects. But I really hated it that I had to redo EVERYTHING again, for every new project that I started. I hear you saying "you didn't have that many projects...". Exactly. I always was detered from starting some of the further ideas I had in mind, due to that obstacle of having to redo things I already did, by eigther copy&pasting those classes that worked, or just starting from scrath. I'm a lazy person, I don't like to redo work. So whats was the logical conclusion to do now? Write my own game-engine, of course! Silly you who would suggest using something like Unity - haven't just read my article up to this point? Judging by the length of it, you probably haven't, but nevermind...

Now let me briefly adress the next step that lied between then and where I'm at now. I started to make a game engine, which would have been called "Dark Mountain Engine", but didn't find the motivation to continue. Then, in summer 2012, I wanted to take a small step back, and instead make my
own kind-of Rpg-Maker. Then I finally started to get the grip of it: I still remember that thread on gamedev that I made about GUI design - it totally changed my point of view. Learning about signals/slots was the starting point for me to learn how to write "good" (read: workable for me) code.

It all went uphill from there. I had a halfway working 2d editor after some time. But then came my studies at university. So we were asked to make a game project in our second term to apply for the game-area. Then I was like: "Hm, the time has come to make my 3d engine. Now or never, success or I'm going to leave this sh*t forever". So I had less then 4 months to take my barely-functioning 2d editor, and make a fully fetched 3d game engine out of it - alongside a basic 3d towerdefense game with a small leveleditor. OH BOY. What was I thinking? I did the same kind of sh*t already as part of my graduation, and now I was doing it again? Just with a much higher relative difficulty and much less time. And quess what... It was the sucess I've just been waiting for!

I started to really carefully plan my structure ahead - while still getting stuff done, with only small phases of analysis paralysis. I designed a flexibly entity-component-system, a complex low-level-renderer (using a design discussed in the "frostbite rendering architecture" thread in those forums"), and everything I needed for that 3d towerdefense game. So the "Acclimate Engine" was born. What libaries did I use? Silly you, I really think you aren't paying attention. Don't worry, I'm glad you even got so far. You deserve a gold medal for getting through this wall of text (or two, really).

And that is where I'm at. After that project, I continued to develope the engine up to this point. I integrated a directx11-render-backend, plugin-suppport, an editor, and by now a visual-scripting language. The engine has grown from about 15k LoC to about 150k as for now, and as much as LoC is not a great measure for anything, it still shows a great success for me, being able to handle the evergrowing complexity without it getting unworkable. Its far from it - I plan on continuing to develope the engine for quite some time. It only seems to get better and better with every iteration, unlike my other projects. For example, I'm in the progress of porting Terranigma 2 from the Maker to my engine, also finishing the game up content-wise. But thats another story I will tell another time.
__________________________________________________________________________________

Oh boy. Now that got way out of hand. I really don't expect anyone to fully read that. But thats just how I like to write - I'm sort of unable to express my thoughts without thousands of words.

So if you want to see something more visual, here is a link to my portolios "other projects" page, where you can see all the projects I mentioned:

http://www.envile-media.at/jwatzinger/?page_id=44

So next up, I'm going to talk about the progress of the Acclimate Engine so far, starting from the beginning, divided into the different modules. So stay tuned!
3 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement