Skip to content

Latest commit

 

History

History
103 lines (68 loc) · 7.02 KB

STORY.md

File metadata and controls

103 lines (68 loc) · 7.02 KB

The Story

The following is a short summary of part of my gamedev journey and how it led to Dusk.

  1. Humble Beginnings
  2. Hitting a wall
  3. Coming to terms
  4. Last Stand
  5. Going Forward

1. Humble Beginnings

In my early teens, inspired by the games I loved most at the time, I created a lot of small prototypes messing around in RPG Maker, Bethesda’s Creation Kit, and the Map Editor from Far Cry 3.
I had the time of my life designing and creating Pokémon ROM hacks, mods for The Elder Scrolls V: Skyrim, and levels for the Far Cry game.
All these attempts were very amateurish and not polished as I was overwhelmed by the complex tools wielded by my young and naive mind. I also couldn’t really fathom what my design choices actually meant, be it in terms of implementation or what they even meant/provided for the experience.
But I was enjoying myself so much experimenting, learning, and bringing my creations from paper to the screen, that it pushed me past all the barriers I faced! I could not be stopped!


2. Hitting a wall

By the time I was finishing high school, I wanted to create my own game concept, and not something on top of an existing game. I picked up Unity but was quickly overwhelmed by the number of things I could do in the editor, and, unlike my younger self, I quickly lost motivation and gave up.
I knew another route was building everything “from scratch”, creating my own engine with the at the time so “mystified” language of C++ and using a framework like SDL2 or SFML.
I thought I was decent at programming from my short stint in Unity and some Python, and my thought process going into building my own engine was that I would not be overwhelmed, because I would not have 1000 different options like in Unity, I would start at 0 and build them one by one.

Boy was I wrong. There were 2 problems.

I did not actually know how to program. Going from no more than a C# and Python newbie to C++, I was completely lost. I tried to follow online tutorials, but it was just too hard, and I could not even tell if I was guiding myself in the right direction. Which leads to the second problem. I did not even know where I was going. In regards to C++, but specially the project itself. What even is an engine? How could I build one if I don’t even know what it is or does, besides the overarching capability of “creating a game”.

And so, just like with Unity, I gave up.


3. Coming to terms

In University I had the opportunity to work on a game each semester. I made very large strides in my programming and became comfortable with C# and Unity and had some contact with C++. So I tried my hands at creating an engine again, this time armed with more knowledge and confidence.
At this point, even though I had worked with multiple engines and frameworks, I still had no idea how they functioned or what they did. I had heard of graphics APIs such as OpenGL, DirectX, and Vulkan, and decided to start there.

Between semesters, I followed the tutorials on learnopengl together with The Cherno’s OpenGL series.
I created a very rudimentary application that could render 3D objects imported from files, had basic lighting, camera movement and some GUI to change data such as shaders, uniforms, models, textures and so on.

It was a blast, and I was really proud.

The project was growing fast, and I was not being able to keep up, largely because my C++ knowledge was very limited. I had lots of issues that I managed to overcome simply by being persistent, without really understanding how it worked. Simple tasks in Visual Studio like adding include directories or linking libraries were concepts that I was not really grasping, and it was proving to be difficult just to get the bare minimum working. Everytime I added something new, something else broke.

So as the semester started, I put the project on a shelf, proud of what I had done, but also scared because it was at this point that I was becoming aware of what an engine could encapsulate, and all the time and knowledge from various areas that would be necessary to make significant progress on such a project.
Once I started having that realization, I really struggled because I never thought I would be able to come to close to anything that resembled an engine. Even though I felt really comfortable with Unity, gameplay programming and abstracting systems into high-level code, I thought that I was not smart enough to grasp the underlying concepts of lower-level programming and the flow and architecure of an engine.

I was coming to terms with the fact that I was not good enough to make it and I struggled a lot because of this.


4. Last Stand

In retrospect, something I did not realize at the time, was that I had the same thoughts when I first had started the small 3D renderer. When I started it, I honestly thought I would quit one or two weeks in, with barely any progress. But by being very persistent and as corny as it sounds, not giving up, I managed to surpass my expectations by a lot, creating something I was proud of and learning a lot in the process.

Immediately after delivering my last University assignment, I created this repo with the intention of having this be the project that turns into something truly meaningful.

This time I was going to do things right.

It was not just about creating the project and learning, it was also about proving myself that I could actually do it.

Every time I faced an issue, instead of trying to slime through it, I researched, learned and absorbed as much as I could. At first, not all of it made sense, but with time, once I learnt new concepts, I would remember all those notes I had taken and make the connections. It clicked!


5. Going Forward

Dusk as taught me a lot of things. It has been as much a of personal journey as well as a technical one.

I became much more knowledgeable in C++ and a better programmer as a whole. I expanded my knowledge of Build Systems, Operating Systems, Compilers, Assembly, Software Architecture, Design Patterns, Data Structures, Algorithms, Memory Management, Computer Graphics, the OpenGL API, GLSL, SIMD, De/serialization, Virtual File Systems, and so many more topics.

I gained a lot of experience rummaging through public repositories and reading others code, taking notes, and learning from it. It made me much more comfortable diving into new APIs and adapting to different codebases.

I am by no means and expert or even a reputable source when it comes to any and every one of these topics, but I am really proud of my progress. If you had told me at the start of this project that I would have reached this point, I would have not believed you.
But I persevered, and here I am.

There is still a long road ahead, but I am confident in the path I am taking.