#0 Lina Engine Development : Start
Hey there fellas. I am proud to announce that as a Bachelor's project this year, me and a friend will be developing a game engine framework! We decided to challenge ourselves with something big, and also improve our skills in the means of system architecture and also C++ coding. So, we have decided, why not develop a game engine? Now, I know, there are tons of open-source game engines are there, and there is no guarantee that our project will be somewhat successful in the means of aid to the community, but I have the belief, mindset, and the experience to step into something as complex, but at the same time as fun as this.
Before starting to write any code, we began with inspecting the famous game engines that are open-source or has available repositories online, like; Godot, CryEngine, UnrealEngine and Cocos2D. While inspecting, the thing we were looking for was extracting the layout of their architecture. How were the classes handled in the means of dependency injection? Which types of message handling system they were using? What were the extends and capabilities of their Message Bus systems? We asked a lot of question, and had drawn their layouts. Then we tried to figure out, one by one, if there was any extra-ordinary style of implementation or design they used in order to implement a particular task, rather than the traditional patterns of that task. When we found some, especially on CryEngine, we inspected the reason behind such weird, but surprisingly well-working tricks & implementations. From this 1 week research, we had gained a whole lot more perspective in the means of designing a system architecture for a layout. Of course, all these research came along with extensive literature search and reading articles & books as much as we can. As the development process will keep going, we plan to take modularity in our systems, and make it as flexible as possible for future changes if we decide to change a particular pattern we used on any system.
After reading and inspecting tons of materials, we started to design our own architecture. Of course, since we do not have extensive knowledge and experience on game engine architectures, we chose to go with an iterative method. We wouldn't spend too much time on designing a particular system, as we would figure out in the future that our design was wrong or it lacks a particular feature that we would need to change it and write it from scratch. So as our development process goes, so does our learning progress. We plan to constantly change any feature, and do not take any thing we have written, or will be written at a particular time for granted.
Our plan and aimed outcome in developing this engine, is mainly to improve our skills and understanding of architecture design, software design patterns, and game engine layouts. Secondly, we do want to improve an already existing feature in the state-of-the-art game engines that are currently available in the market today. We do hope that, by focusing on a single feature, we can extend and do what one of the biggest engines could not do due to their scalability. We do not aim for a game engine that will be perfect for every type of platform or every type of game. We will decide on our genres, on our borders, extends and capabilities. This way, we can actually alter some existing feature on game engines like Unity or Unreal. Lastly, we also hope to provide an article, along with this blog, to aid anyone in the community that needs a head-start in developing an engine.
So basically, that's it for now. Hopefully we will be contributing to the open-source community and achieve great results on our way! See you next time.
Github Repo: https://github.com/inanevin/LinaEngine