Artizens is an ambitious game and needs some serious technical horsepower to get moving. Multiplayer online games can be some of the most complex pieces of software around, often exceeding millions of lines of code. How does a game like Artizens start from nothing and become a reality?
Choosing a programming language
Software comes in many flavors and it's important to know which one is best suited for what you want to create. When choosing a programming language for Artizens, some factors that we considered are:
- A well known language for hiring experienced programmers
- Reliable cross-platform compatibility
- High performance
- A strong selection of existing libraries and tools
- Code that is maintainable for many years
Given all of this, it's not a surprise to my fellow programmers that we have coded Artizens in C++. This is one of the most popular languages for creating games in and has strong support within the game development community.
A glimpse at the Artizens code base, written in C++.
Creating a game engine
When starting a game, the first thing to do is to see if there is a game engine that already exists which will do what you need it to. Popular game engines nowadays include the Source Engine, Unity, and the Unreal Engine.
With Artizens there was no game engine which exists that quite fit our needs. We are an online 2d platforming game, which is already unusual. Throw in our complex user generated content and animation systems and we are really pushing the boundaries of what's already available. That leaves one choice: make a game engine ourselves.
Fortunately, even if we are making our own game engine, we are not left to write all of our own code from scratch. There is a huge community of developers that allow you to use their high quality code for your own game. Here are some of the libraries that we are using for Artizens:
- SFML: A powerful multimedia library that handles cross-platform windowing and graphics
- fmod: The industry standard tool for dynamic sound effects and music in games
- enet: A robust networking library for transferring packets at the real-time speeds needed for games
- lua: A versatile scripting language that designers can use to create new areas and monsters
- libRocket: A user interface library that uses well-known formats for designers to lay out the game's UI
Leveraging libraries like these saves us a lot of work and ensures that the Artizens code base starts with a strong foundation to build upon.
Creating tools for the team
Many people outside of game development don't realize how much time goes into making the tools that support the game. On a complex project with many people working on the same files, having a simple and efficient process for creating new content can make all the difference. For Artizens we have streamlined our development process over time with a small but growing set of tools.
The level editor allows designers to easily create level designs by importing assets and defining areas of interest using simple shapes. This tool then exports all the data into a format that the game can understand.
The asset manager keeps track of all the content that goes into the game and assigns them unique ids to be used in the level editor and scripts.
The animation editor gives our artists a preview of what their designs look like in the game and lets our designers manipulate the bone structure that makes your drawings come to life.
The build manager keeps track of the large amount of static content that our game uses, making it easier for us to work together, and allowing the game's servers to find the content they need to run.
This post only scratches the surface of the work we've been doing over the last year to make Artizens a reality. The good news for you is that with all of this in place, we've accomplished one of the most difficult parts of developing a game -- getting a running start!
I hope you enjoyed this glimpse into what makes Artizens tick. We're excited about what we've done so far and even more excited about what's to come!