During 2013, I learned a lot about game development and greatly improved my coding abilities. I started the year by doing OpenGL with my basic physic engine and ended the year doing a lot of Unity, currently working on a small multi-player game, and a bit of C++ with OpenSceneGraph and Qt.
As 2014 is starting, I decided to put some thoughts in my objectives for this year and write them up here so I don’t forget it. They are in no particular order and quite broad but, this will be my guideline for projects this year.
► Get back to the root
I spent a lot of time coding in Unity3D this year and greatly improved my C# coding ability. I would like to work with lower level engine without Unity-like GUI and will probably do so with C++. This will also allow me to get more confident with the Standard Library and other typical libraries such as Boost or SDL/SFML for multimedia interaction. I’m also interested into learning a high quality engine such as CryEngine, UDK or Source. Knowing how the big studios structure their engine would definitely help me to work on smaller project/engine.
Lately, I spent some time compiling OpenSceneGraph with Qt and running/modifying small examples. I’m now considering adding the Bullet library (through osgBullet) to it and make a simple game/simulation to get some experience with a Scene Graph rendering engine, a physic engine and a GUI library.
There are two more topics I would like to improve. Although they aren’t directly related to C++, I will probably use this language as a medium to learn them and decided to put them in this section.
First, like many, I know Gang of Four’s Design Patterns and skimmed over some of their codes. Apart from using Observer and Singleton Pattern, I never really used them myself. By concretely using design patterns, I would get a deeper knowledge of their functioning and their advantage/disadvantage. It will afterward be easier to spot when they are appropriate.
Second, I read a lot of theory on Multi-Threading. I know what are Mutex, Lock and other techniques used to ensure proper multi-threading. However, I have never coded an application that uses different threads. I would like to experience bugs such as race condition and debug it myself. This will definitely be interesting challenge that will make me grow as a programmer. Since Boost offer multi-threading, I will probably use it to for this since it’s already a library I want to get more experience with.
► Modern OpenGL and Shaders
My basic OpenGL engine was coded with deprecated function using immediate mode. I did this to understand where OpenGL come from and get a good understanding of the basics. Now I want to transfer this knowledge into modern OpenGL. My graphic card support OpenGL 4.0 so I might go straight for the last version and experiment with new feature such as tessellation, or use OpenGL 3.3 for larger support. It is really important for me to get a better understanding of modern rendering pipeline.
I’m also interested in starting to write Shader code. Again, I know how they work but never wrote one myself. I would be interested in getting more lightning/shadow knowledge at the same time.
► Learn new languages philosophy
Learning and understanding different languages philosophy seems like a good way to improve overall code quality. Without doing much research on the subject, different “exotic” languages caught my attention recently and I would like to learn at least one of them: Haskell, Go, Rust, Scala or F#. In the same idea, learning an older/legacy language could also be helpful, such as Lisp, Pascal, COBOL or FORTRAN. The two languages in bold are the ones that I’m currently considering to learn.
I would also like to get a better knowledge of how low level code is executed on computers. I would at least like to execute some x86 commands on my computer and have a better idea of the available functions. This could come useful if I have to debug compiled code or try to reverse-engineer code.
► Learn to create model with graphic software
Improving my modeling abilities is something I’ve been interested in for a while but never put enough time in it. I already have basic working knowledge of Solidworks (which isn’t really designed for game development), 3ds Max and Blender but, I want to improve my ability to efficiently produce good model with those software.
Even if I don’t end up using much of my modeled assets, it would give me a deeper understanding of the different texture mapping (Normal, Bump…) and the different reflections type (Specular, Diffuse…) that are used in modern technologies. I could also get basic knowledge of animation creation. I only used pre-made animation so far, never created any myself.
All the knowledge gained from modelling could definitely help me being more efficient in game development. Also, it would greatly help me understand the works of artist and how it is connected to the work of devlopment.
► Finish Games
During the year, I worked on different project. I consciously sought to work on big projects with technical challenges. However, I haven’t completely finished any games and that’s something I want to change this year.
I will put a high focus on doing game jams and complete small games for event like onegameamonths. I will focus on making small games teaching myself different aspects talked beforehand in this post. Building various small game with specific objectives in mind such as a new language/framework or focusing on assets instead of code will help me to complete all of the objectives this year.
I already register to my local GlobalGameJam event at the end of this month. I also intend to finish at least a game on Android, probably with Unity3D or OpenGL ES.
This is a pretty big list with a broad aiming. I don’t know how far I will get this year but I now have my objectives set. This was a really interesting exercise to do and I’m looking to do the same thing at the beginning of next year. It will be interesting to see what has been done during the year and what is left to put on next year objectives. I’ll do my best to at least basically cover all the subjects and post results on this blog.
There is a last thing I haven’t put in the list but might be an objective for this year. I would be interested in hosting my WordPress blog myself and create a different website where I could host my games and make a section for the blog. I already have the hosting service but only need to make the change and start coding the website. However, this isn’t my top priority right now.
2014 will be an interesting year and I’m pretty sure I’ll learn a lot. Just looking back on this list, I feel like I need to start right now if I want to get to the end!