Our Interning Developers talk about their drive

AAA Gaming Institute’s Capacity Building Initiative

A major part of what we do at AAA Game Institute is Capacity Building. For that reason we have had 2 interns over the past month who have been deep diving into Gaming with us, and have learnt the skills necessary to make games. We did an Interview session with these 2 developers – and in particular, we asked them to tell us more about what would they like to tell the rest of the community out there in terms of their experience and motivations. These 2 developers are Amir Abdulaziz and Issa Suleiman.

Our Interns

Amir Abdulaziz

Issa Suleiman

Question and Answer Session

Question: What fascinated you about gaming?

Amir

From my childhood I have always been fascinated by video games… especially Role Playing Games because you have total control over the character and you are never forced to follow a script.

The interest turned into a mission when I realized in my first year of being a software developer at AAA Platforms that i want to be a game developer.

Issa

I have been a gamer since childhood, I’ve always found it fascinating to explore new worlds, challenge myself to be better in multiplayer games and learning how to solve puzzles in story games. To me gaming is like a movie that you can actually take part in and do crazy things you wouldn’t do in a normal world.

Question: Why did you want to become a Game Developer?

Amir

I became a game developer because it’s the only career I will ever be truly happy doing. It’s the thing I wanted to be since I was a kid.

Issa

In some of my gaming community I have always been the go to person when it came to giving out information, I have always had a passion in knowing more than just the game and I actively seeked out other information about a game. When I was introduced to gaming development I knew I this is where I wanted to be. I want to understand all the complexity involved in making games and in time be able to make my own world.

Question: How is your experience so far with the AAA Gaming Institute?

Amir

Its been crazy enough – I was able to build and design the whole game.

Issa

It’s been a great experience so far and I am excited with all the challenges that have been thrown my way. Learning and putting some of my experience into practice has been a riveting journey.

Question: What do you think is the potential for Game Development overall?

Amir

The bottom line is – game development is surely an exciting and rewarding career, yet an extremely competitive one too. You should come prepared for a challenge and give yourself a good reality check before entering it.

Issa

There’s a lot of untapped potential when it comes to gaming in general in Kenya and development is a part of it. Once this market takes a hold and grows the possibilities will be endless to how much it can grow.

In Conclusion

It is without a doubt that a lot of folks who want to develop games have a deep passion for it. At AAA Gaming Institute we are exploring ways to create opportunity spaces for folks who have a deep passion for it – and we want to be a major contributor to the development of the Gaming Space in Sub Saharan Africa. In this regard we will be working on a series of programs that we will be communicating soon about. On our side though – we are happy to have had folks like Amir and Issa become a part of our family at the AAA Gaming Institute. We hope to accomplish a lot more in the months to come.

That said, we would be glad to have Partnerships that can help us broaden the scope of our Capacity Building Initiatives.

Our new Adventure – Setting up a Gaming Institute in Mombasa

Mombasa is Kenya’s 2nd Largest City, the “Gateway” to Kenya – hosting one of Africa’s most strategic sea ports. The port serves a good chunk of Eastern Africa – but that is aside from the point – Mombasa for myself and Aly Salim (Co-founder at AAA Platforms) is our dear home. We grew up in Mombasa, our families are all in Mombasa, and we feel at home in Mombasa. Between myself and Aly we have been active shaping up Innovation Hubs (we set up the pioneer innovation hub in Mombasa known as SwahiliBox) and Maker Spaces (also setting up the 1st Maker Space known as MakersHub). We are now embarking on a new journey – the setup of the one and only Gaming & Multimedia Institute in Mombasa.

The SwahiliBox Open Space

The AAA Gaming & Multimedia Institute

Gaming is not only just a passion for myself and Aly Salim – for us – it is a starting point for greater things to come for Mombasa and for the region as a whole.

Over the past week, we had participated for the 1st time in the Global Game Jam. With fresh and green folks – and managed to get 3rd Place in Kenya. It is a great start – validating the progress we have made in the past month with our Capacity Building pilot.

We have been building traction slowly, and teaching ourselves a lot over the past few months. Over the past year, myself and Aly have worked on a number of R&D projects. Some of which include:

  1. Modifying and Tinkering Game Engine Cores (Tinkering the Love2D Game Engine).
  2. Creating Extensions for Game Engines (Defold Engine).
  3. Modifying some Open Source Games (GBRausers from the team at Defold).
  4. Our submission to the Global Game Jam 2021 (for which we developed a Game known as The Lost Hero – under the theme Lost and Found).
The Lost Hero – A Game Done by the AAA Team for the Global Game Jam 2021

Focus Areas

Although at the moment our focus has mostly been oriented around Open Source Technology – we aim not to be limited in scope in the long run. Our focus will also be more holistic – we want to be able to capacity build the region and create initiatives around:

  1. Game Art.
  2. Game Design.
  3. Game Engineering.
  4. Game Technology Engineering.
  5. Multimedia.
  6. Industrial, Startup & Corporate Application Areas – for things like AR / VR and 3D technologies.

Capacity Building

Obviously Capacity Building is at the core of what we are looking to do. We are a Social Enterprise, and we would love to have our core community empowered to be capable to develop on top of technology and create breathtaking experiences on Gaming and Multimedia.

Working Together

We are looking forward to great collaboration with Industry Partners and Leaders in Game Technology and Multimedia.

We would especially begin by thanking Douglas Ogeto – Ludique Works, Abdihakim Hussein – Unity Evangelist and close friend of ours, Ben Roberts – Liquid Telecom – and obviously folks like Johana Riquier from Unity Technologies and Jake Manion from Internet of Elephants for having been instrumental in not only shaping the African Gaming Eco-system – but also being inspirations for most of us folks who are looking to setup Gaming Initiatives to work within the scope of the emerging African Gaming and Multimedia eco-system.

Do reach out to us at info at aaa-platforms dot com if interested in joining us in this amazing journey. I believe it is an interesting time to be shaping up Multimedia. And although we are a garage setup at the moment, I believe the future is bright for where we would be 6 months from now.

The Fort Jesus in Mombasa – Photo Credits: Zahra Abdulmajid

The Core of C# Game Engines – and A bit about Unity

There is always 2 kinds of developers when it comes to gaming: There is the Developer Developing the Games, and the Developer developing the tools. In this particular article we talk about the Game Engine Core technology, but we cover in more detail C# technologies – among them the Unity Engine.

C# Game Engines

In a previous post, we covered a bit of how Lua Game Engines work at the core. But without a doubt the world today is dominated by the likes of technologies like Unity Game Engine – which has a portfolio of hits across multiple platforms (Established consoles, Mobile (Android / iOS), Web, Desktop, etc). Unity is behind Game Hits like the recent Fall Guys.

Disclaimer: Inspiration for this article comes from MonoGame – an Open Source C# Game Engine that is similar in some ways to Unity as a Core Engine.

What is the difference between how Lua works and how C# Works?

There are 2 I can say major preferences on Languages when it comes to Languages folks use to develop Games – these include – Lua and C#. Personally I believe C# has gotten prominence mostly due to the fact that Unity is quite a popular IDE / Tool, Lua is a veteran in this space. So what is the difference between these 2 languages when it comes to Architecture at the core?

In principle how C# is not so different from Lua in terms of how it technically works. The only difference is that the rift or divide between what is on C++ on the core and what is the high level C++ is huge – very huge when dealing with C#. Lua is designed to be like a more high level sibling of C++.

With C#, the C++ core is very much very well architectured and compiled to libraries even before C# touches any functionality coded on it.

Visual Architecture of C# Engines

C# Game Engines – How they are Architectured

As we can see, the C++ code is fully compiled into objects. That however does not mean these libraries solely originate from C++, other languages capable of compiling libraries can also take part in forming these libraries that C# can consume.

Integration with Low Level C++ (and other..) Binaries

The libraries are of 2 kinds:

  1. Platform independent – in which for instance a .dll can work on any platform.
  2. Or, platform specific dynamic libraries are compiled. These are mostly:
    1. .so files for Linux.
    2. .dll files for Windows.
    3. .dylib files for Mac.

C# has very established methods to bind into these dynamic libraries, and what Game Engine Core Developers do is they create Class Abstractions for how these Libraries are accessed, and they expose these Abstractions to the Game Developer. In essence, they are mostly taking advantage of very established Low Level Libraries compiled from C++.

Unity – and how their Eco-System is structured

In relation to the Core Engine that is C# – Unity went a step further and provided “add on tools” on top of the Engine Core, which comprises of the IDE / Unity Development Environment we all see, and the Products they offer as value add products / services. The Development Environment and these extra products allows you to use a number of tools and products they offer as part of the development experience you get, and they place it on top of the Game Engine Core. But they all blend so well to form one large Eco-System called Unity Game Engine – and provide powerful Game Development Experiences. Unity therefore goes a step further:

The Unity Eco-System of Products

So in essence, Game Code, together with Plugins and Extensions, and Developer Tools, all work together to produce Game Binaries. These Game Binaries then have functionality embedded to access addon Unity Functionalities through its Product Offering to provide a single breathtaking experience that is not just provided with the binary – but with the eco-system. These include: Multiplayer support, CDN support, Advertising and Monetization, etc etc.

In conclusion

The choice to use C# to abstract a lot of the core functionality for C++ and other very low level binary implementation of logic seems to be a very smart choice. C# as a language is very focused on providing the best interface for Object Oriented programmers, and since most entities are represented as Game Objects, it does a much better job compared to very many other programming language.

And it has an extra advantage – being built on top of the Mono Framework, C# is built to be cross platform. Its implementation is also as efficient as technologies like Java, C# and Mono tend to be very close to bare metal and native in implementation. I believe there is a lot of scope for C# and how it will scale. There is more to come.

Examining how Lua Game Engines work with Android

Lua Game Engine design is a whole topic of discussion on its own. And in one of the coming sessions I God willing plan to cover how Lua engines in entirety work – together with a deep dive into how C# engines (the likes of Unity / MonoGame / etc) also work. But for this specific segment we will just talk about how Lua engines interface with Android.

For this specific article I shall dissect my experience developing an Android Battery Status Extension – available on GitHub for the Open Source Defold Engine as a basis for the discussion. Basically what the extension does, is it allows you to get Battery Charge Percentage and Charging Status from the Android SDK Libraries. To break it down abit here is an Architecture Diagram:

The Lua Runtime is an embed on any Lua Engine that talks directly to C / C++ code. It makes use of a Lua Bridge (employing a technique known as Lua Binding). The mechanics for this is something we can cover in mode detail later on. However, what normally happens is the C / C++ code is normally stuck in between 2 very opinionated worlds: Android and Lua runtime. To talk to Android, it will need to interface with the Java Runtime using a technology known as the Android Native JNI (this is the very stuff of Android NDK).

JNI is a technology that allows C / C++ native code to interact directly to Java Classes. And in the case of the Battery Status Extension, the code is right here.

Needless to say though, all Lua Game Engines that export games to Android use the very same technique. C# Engines on the other side use different techniques altogether, but work in much the same way. I do plan to deep dive into more of Lua engine core as well as C# engine core in a bit more detail in following articles. So stay tuned. More to come.

The anatomy of a Game Engine

There are various techniques individuals or organizations can go about making games. These include:

  1. Doing it from scratch: This is the most complicated technique. It involves manually assembling all components from the ground up to make a game. In the traditional world this was the approach, and since games need to be highly optimized, folks used to develop a lot on top of C & C++. Including integrations to libraries talking to the GPU, Sound, Handling Input, etc etc..
  2. Employing Libraries and Abstraction Layers: This is the second step that is less complex compared to the 1st approach. In this technique folks make use of already existing abstractions, including on languages like Lua, to deal with the very technical low level interfaces to GPUs, Input, Sound, etc. A good candidate for this is LibSDL, which if you do not fancy C / C++, bindings do exist on top of languages like Lua in the form of LuaSDL2. Lua has traditionally been a common language of choice for Game Developers working to abstract direct access to C / C++.
  3. Working with a Game Engine: Which is quickly becoming a popular technique these past few years, Game Engines abstract not only libraries for low level access, but also provide tools that deal with routine operations in game development. These sophisticated tools have allowed Game Development to become a lot more easier (but that does not mean it can take you a month to create a hit – under most circumstances).

So what is the anatomy of a modern – capable game engine?

I spent the last few months trying to answer this question, and this also saw me playing around with C / C++ code and Lua bindings in some scenarios. For instance, I actively tried to tweek the Love2D Engine and put in my own custom module to see how it works: as I did on this code repository. There are some very similar patterns in all these game engines I dived into. Here goes:

  1. At the core, most game engines modularize or compartmentalize aspects such as Audio, Input, Physics, and Graphics Management, Game Object Game Object Lifetime Management, special Utility Functions, and Deployment Management Tools.
  2. Audio deals with how Music and Sound Effects are managed within the scope of the game’s lifetime.
  3. Input modules abstract various input methods: including Keyboard, Mouse, Touch, Joy Pad / Game Pads, etc etc.
  4. The Physics subsystem implements how objects interact to emulate real world interactions. A good deal of these engines mostly borrow Box2D and Bullet Physics, and additionally go ahead to create abstraction layers for their Game Development environments. The physics subsystem is also responsible for checking for collisions between objects and handling those collisions in various ways.
  5. Graphics Management is providing tools and SDKs that allow the manipulation of graphics elements, including abstracting Materials, Shaders and Particles. This layer is what interacts with SDKs like OpenGL and Vulkan and provides GPU level access for your Game Objects.
  6. Game Object and Game Object Lifetime Management allows Game Developers to create objects with life and control the interaction of these objects with Graphics, Audio, Physics, Input, etc..
  7. Special Utility Functions abstract the use of Vectors (screen coordinates), Cameras (viewport of a game), Special Mathematical Functions, Data Management, and even at times, the capability to work with functionality available on different platforms – like Mobile, Web, Desktop, Console, etc.
  8. Deployment Management: Tools to make it easier to quickly deploy your games to leading Mobile, Web, Desktop, and even sometimes Console platforms.

Its easy nowadays not to appreciate the level of efforts needed to create games from scratch. But this also means that the Game Engine industry has reached a specific maturity level as has a lot of other Engineering Disciplines. However, making games is still a complex science, because even if it has become easier, the state of technology nowadays demands more interactive and sophisticated games to be developed. So the complexity is not gone, it has only shifted to User Experience management. We are in that regard, a step ahead.

Welcome to the Open Source Game Developer Blog

Open Source has had a profound impact in our world. It has inspired great ideas to be shaped and also be widely adopted. It has also allowed everyone to have access to affordable technology, be it in the Cloud or on Premise, or on your own hardware device. There is no doubt as to the impact of technologies like Linux and Android. Open Source has been a joy for developers, corporations, and end users.

My particular interest though is to be able to elaborate how Open Source technology can both shape the future of Gaming and Multimedia – from both a technical and also from a business oriented perspective. It is in my belief that we are at that stage in time where we are seeing some major transformations happening in Game Engineering and Game Engineering Technologies also. A good degree of this transformation has seen a number of Game Engines convert to become Open Source and Free. Topics around these Game Engines will be highlighted in more details in coming blog posts. However, the ecosystem shifts are also coinciding with major changes in the market in areas of Console, Mobile and PC Gaming. This NewZoo insights report states that “The World’s 2.7 Billion Gamers Will Spend $159.3 Billion on Games in 2020; The Market Will Surpass $200 Billion by 2023”. So what are some of these major eco-system shifts coming into play?

  • For starters, Mobile Devices that are highly capable, with extremely amazing amounts of storage and RAM, as well as CPU and GPU are becoming more and more available for cheaper prices. These Mobile Devices are capable of storing amazing amounts of battery power.
  • 4G is being ushered in.
  • High speed broadband Internet is becoming more affordable.
  • Amazing amount of Cloud Computing Technologies is being made available at cheaper prices to companies and developers. And with major players setting up global data centers (with players like Amazon, Google, and Micrsoft), it has become cheaper and easier to get amazing compute power for lower latency than before.
  • More SaaS availability. Game Technology Backends are becoming more available, some even Open Source.
  • Game Engines are also becoming cheaper to acquire, and there is amazing technology available that is Open Source.
  • A plethora of technologies and platforms to develop on top of is easily available. For instance, developing games for Android can come at no cost at all when it comes to Software you can get access to to make amazing Android Games. And you can literally develop amazing back-ends using Open Source technologies like NodeJS or Python or Lua.
  • Not to mention – how really advanced the World Wide Web has become nowadays, and the technology powering access to essentially anything. We have created easier ways for folks to play online games, and have enabled developers to get as productive as possible – by means of affordable tutorials, and free resources that can get anyone up to speed – quickly.

These are just but some of the factors that will lead to drastic changes in Game Engineering Principles and Technologies. The shift has begun, but is still in sequence. There is a lot yet to happen and in the center of all this shall be Open Source technology driving new ways of looking at things. It is an exciting time to be a Game Engineer.