The BattleDrones title screen
The ever-escalating war of billion-dollar video games has been a boon for independent developers. The two leading video game platforms, recently costing thousands of dollars apiece, are now free for anyone to use. Thanks again, Internet, we may yet forgive you for closing the bookstores!
Unreal and Unity, the two competing giants responsible for dozens of the most popular games, are fighting for the minds of developers. They figure (correctly) that the more developers familiar with their platform, the more likely the next winning game will come from their game technology. The “catch” is that you commit to pay them a cut of future revenue, but only if your game is commercially successful.
That meant that I could make a game and pay nothing.
Not too long ago, Markus “Notch” Persson, the creator of Minecraft, had a fantastic idea for a video game. In the now-defunct 0x10c concept, players would write computer code to control a spacecraft. Part of the game was that each player had the same number of computing cycles and therefore efficient coding itself was the core game mechanic.
It may seem odd for a game to be about programming, but these days many video games have a giant community of software developers players who write code to modify those games. Often these “mods” are so good that they become de-facto extensions to the game.
Notch’s concept was very grand, but I thought it would be pretty easy to do something like it on a small scale, as a proof-of-concept game demo.
In BattleDrones, the player has control of a computer-driven starship, a BattleDrone, that will carry our humanity’s fight against the evil alien invasion. A Drone operates only via the computer code that the player writes and must be programmed to sense danger and fight autonomously.
Getting Started with Unity
I really had no experience writing video games nor any familiarity with either Unity or Unreal. Luckily, for those who know nothing about something, there is YouTube.
I choose the Unity platform and dove into making some tutorial games to get an idea of how the engine worked. As you may have gathered from this blog, I learn a lot by making mistakes, so jumping right in and making those mistakes as quickly as possible is always a good approach for me.
The first game concept I worked on with Unity, however, was a game called Fork that I started with a developer friend of mine. Fork’s mechanic was manipulating magnetized crates (in a space hangar) in order to progress in the game. While the concept was interesting and we learned a lot about Unity, we kind of hit a dead end and moved on to other projects.
When I began development of Fork, I expected that the there would be tools to, say, put a title here or put a magnet there. I figured one could make objects and add textures to them. You know, make a video game! It turns out that I was quite wrong about how that worked.
Developing a Video Game
While game development tools are very powerful, they are also very basic. If you want to make a cube, well you can do that right there in Unity! If you want a spaceship, however, you are building that in some other software package.
The simplicity of the game-development tools turned out to be more good than bad. One of the most powerful capabilities of a gaming platform lies in its ability to simulate rigid body physics. This allows a developer to basically set physics in motion and let the game engine handle the rest.
For example, a developer can assign mass to a truck model, put it on a road and spin the tires. The game engine then calculates everything from the friction of the wheels to the steepness of the terrain in order to determine how the truck will move over the road. Attach a joystick input to the front wheels and boom, you have a driving game.
For the magnets in Fork, our work involved telling the game engine how much force a magnet would exert on a body at a given distance and Unity took care of dealing with mass, friction and the movement of the crates resulting from the combined magnetic forces.
Like Making a Movie
Developing a video game is surprisingly similar to making a movie. Here’s a quick breakdown of some similarities.
A video game takes place in an environment that serves as the background to the scene. In BattleDrones, the set is the planet and space skybox that surrounds the player in three dimensions. I bought it for a few bucks from a marketplace where developers sell all kinds of game assets cheap.
In a game, you’ll have objects in the scene that the player interacts with as part of the story. In BattleDrones, these are the spaceships that are controlled by the player or by the computer “enemy”. I created the ship model in Blender, the modeling package we used to create the sets and objects for Sector 42.
The ship then needed to be textured to give it a “painted” appearance. You can see that the game has two ship types that differ only by their paint job. Painting was done initially in Adobe Illustrator and then finalized in Photoshop.
Lighting is almost as big of a deal as it is in film production. Video games use the very same lighting concepts that are used in photography. BattleDrones contains both set lighting of various types as well as decorative lights (“practicals”) that are visible in the scene.
Again, just like in film production, cameras have focal lengths and depth-of-field, in addition to a number of technical characteristics. In BattleDrones, the camera orients itself around the playfield but in Fork, the player object carries the camera so that you see what the player is pointing towards.
In video games, action is initiated by the player and is controlled by the game engine. In BattleDrones, the player’s computer code is interpreted by the game engine and “acted out” by the player’s ship. Because of the Unity physics engine, I only had to apply the appropriate force (when the engine was firing, for example) to move the ship.
Many of the same audio concepts and tools are used to create and mix video game sounds as are used in film and video. Most of the work is in finding or making sounds that fit the game. The BattleDrone sounds were all sourced from FreeSound.org, a website where people share captured sounds for free. Need a tea kettle whistle to make a steam-like thruster sound? A jet engine to use for your spaceship ? You will find them all there.
I’ll cheat a bit here and lump the graphical user interface (GUI) in with titles. The GUI is separate from the physics simulation taking place in the scene and provides the buttons, menus and information outputs that the player sees on the screen.
Play The BattleDrones Demo
Because this is a demo, I’m showing you what I think will be most interesting. In the demo, the code has already been written by the player and you get to just see what happens when the spaceship runs the player’s code.
I see that this has turned into another long post, but I hope you enjoyed a peek into making a video game. You can try out BattleDrones on Windows, Mac or Linux by visiting the link below and clicking the link for your operating system. Once you’ve downloaded zipfile, simply unzip. (There is no install.)