Complex Game Systems


Complex game systems was the second set of lectures I have been through during my second year at AIE. During this set we learnt more advanced features a game has that is generally not as visible to the end user, But by no means any less important. Below I will show code examples for each lecture / tutorial pair we had. All source code can be seen on my Github under AIE_Year2, Direct links will follow each individual tutorial.

Scene Managment

View space culling was the topic on this tutorial. This technique can drastically increase frames per second(FPS).

Random and Procedural

Procedural generation was displayed here. This can be used in a huge amount of ways and is becoming more prevalent in games. The use of "random" values gives more of a sense of natural, we expect things to look similar, but not the same. Games have used this to range from simple random values being added to give a sense of instability all the way up to fully procedurally generated worlds. Expect to see a lot more of this in the future of game development.

User Interfaces

User interfaces are the key way users will engage in a game besides player control. In this tutorial we learn how to create a basic button with a callback function, how to create a container with a parent/child system and how to use draw multiple views inside the one window.

Behaviour Trees

Behaviour trees are one of the ways we control non player controlled elements in games. During this tutorial I learnt how to create generic behaviors, Creation of behaviour sequences and how to create an actor which can be given and follow said behaviours sequences.

Goal Orientated Behavious And Planning

During this tutorial I learnt how to create a Hierarchical task network. These are similar to Behaviour trees but differ in that they are effected by outside elements. In a sense Behaviour trees can as well, but generally if you do you are now creating a HTN. I still have to read up on this technique, but thats generally what I have learn't so far.

Fuzzy Logic

Fuzzy logic is all about adding some aspect of humanity to computer controlled elements. It will take other factors besides the one it is focused on. An example of this is the need to eat, drink and sleep. When it gets hungry enough, it will favor eating, but if one of the others is also in desperate need it will take that into consideration. It will favor certian elements based on the different slopes you give it. ranging from a simple linear slope, triangular, to slow and fast lerping.

Machine Learning

Machine learning is used to help "teach" a given program how to adapt and solve problems faster. A close real world example would be evolution. As an animal grows older and it goes through many generations the better traits will be passed down to its siblings, always creating a smarter generation after its own. This doesn't usually get used in real world application as it has a huge hit on performance but is usually used in some offline process to help aid in the creation of AI.

Game Genre Case Study One

Github Link
This tutorial taught me how to develop a fluid 3rd person camera. Sounds simple enough but things like this add a great depth to many video games. Its the small things that count right? 

Networking

Github Link
During the networking tutorial we learn basic packet sending and receiving. This has all been developed using RakNet. Networking is one of the amazing things most people take for granted in todays world. Something many games would fail without. If you are interested in networking I suggest you look through the source for this.

Networked Game Architectures

Github Link
This tutorial expands upon the above, taking what we learnt and developing a simple multiplayer scene.

Game Genre Case Study Two

Github Link
Here I learn't how to develop a simple mouse picking function. This is mostly seen in MMORPG's and RTS games to select units in the game world.

Audio Programming

Github Link
Audio programming introduced us to using a library called Fmod. Here I learnt how to import, stream and use Audio files in a game world.

Advanced Audio Systems

Github Link
This is an extension of the above. Here I learn't how to use sounds in a 3D world with correct sound positioning.

Game Engine Case Study One

During this tutorial we learn't how to use the basic tools inside Unity. This game engine is used for a wide variety of games, helping many early programmers break into the industry while creating very visually pleasing and fun final products. This is by no means an intro level program, although it does have one of the simplest user interfaces to get your head around.

Threading

Github Link
As you may or may not know, many if not all computers you are or would be around nowdays has multiple "cores". Threading is the use of those extra cores through things called, you guessed it, threads. Threads create parallel code flows that run next to each other. All this sounds amazing right? but one downfall is memory corruption, well more values not equaling what they should. Which brings in Mutex's, These lock values to stop other threads from using them. However at a performance cost. Overall threads are amazing! But as always, there is a time and place to use it, which luckily for us is easy to test when using c++11.

GPGPU

Github Link
GPGPU or General Purpose Graphics Processing Unit is the use of a GPU to process and return values from the GPU, Running this tutorial can result in some extensive speed up times when used right.

Game Engine Case Study One

This was a research topic which can be found HERE.