May 15, 2014 - "The Return" Release

May 15, 2014

"The Return" Release

The first stage of my current project, "The Return", has been completed! Hooray!

By the way, Download here.
It's not perfect, theres probably bugs, probably some unexpected ugliness. It runs only on Linux systems (GNU/Linux not required), with framebuffer support built into the kernel, running on x86_64 processors. No C library is required. To build the game, you will need yasm or nasm to assemble the assembly code and a C compiler like GCC, and a linker. A good C optimizer like GCC's is recommended.

Now, I would like to actually introduce the game:
Basically, The Return is an updated version of my earlier OpenGL game, Untitled One. It uses the same gameplay ideas as Untitled One; The player controls a [space] ship which can fire only in the direction it is facing, like the ship from asteroids. However, unlike asteroids, the game is set on a planet with earth-like gravity. The player is tasked with defending the ship from a variety of enemies using missiles which are also subject to gravity. The missiles carry a warhead which takes about a second to arm itself after being fired, before the missile is armed, it is harmless.
I chose the name "The Return" because it really reflects all the concepts of the game well. The Return is programmed in way that returns to earlier programming methods, and also uses old style graphics. In this way, The Return symbolizes a return to the old-school. In addition, I imagine the story of The Return being something along the lines of the player returning from a long space voyage to find his/her planet at war and must fight despite his/her space craft being poorly suited for planet-bound combat. So "The Return" also references this unspoken storyline.
Unlike Untitled One, The Return does not include any multiplayer game modes, only single player games are supported. However, the number of game modes has increased from three (in Untitled One) to six in The Return. "Classic" mode has been removed. Asteroids mode and Targets mode have been included nearly unchanged.
The new game modes are as follows:
- Missile Command Mode
- Tanks Mode
- Airships Mode
- Everything Mode

Missile Command mode is my own interpretation of the classic game of Missile Command where ground based turrets shoot down incoming projectiles. In my game, there are turrets and missiles coming from the sky, however, unlike in the original Missile Command, in The Return, both are trying to destroy the you. The player's objective is to destroy each ground based turret and shoot down a number of missiles. The number of missiles a player must destroy is equal to the current wave times 2. Each wave becomes more difficult as the player's task becomes harder and the number of turrets increases as well as the frequency of inbound missiles.
In Tanks Mode, the player is pitted against ground based vehicles with turrets mounted on them. The player must destroy all tanks to proceed to the next wave. Each wave, the number of tanks increases and after a few waves, the tanks health increases also. Tanks might seem to be easy to pick off since they are bound to the planet's surface, but tanks have a special trick to combat the type of tactic which would exploit this: Tanks can sacrifice range to arm their missiles early, making close combat more dangerous for the player.
Airships mode uses a similar concept to Tanks Mode, however, instead of planet bound vehicles, Airships Mode features air based enemies, essentially turrets hoisted into the air by balloons. This makes the air more dangerous for the player, but air targets are easier to hit, and the airships have an unusual (but obvious) weakness, their balloons. If an airship's balloon is destroyed, the gun portion will fall to the ground, subject to the same landing constraints as the player. However, in later waves, the airships health is increased, making it possible for the guns to survive impact and continue the fight as ground based turrets.
Everything Mode is my favorite. Everything mode features a random selection of enemies each wave. You might fight tanks the first wave and then be thrown into missile command mode for the second wave. This forces the player to continually adjust play styles to survive. The later waves of Everything Mode become increasingly more difficult as odd combinations of enemies becomes possible. The player might encounter both airships and tanks in a single wave or even turrets and asteroids. As a result, Everything mode tends to get very difficult very quickly. To balance this hardship, the player is awarded some extra health at the conclusion of each wave after wave three.

Programming-wise, it is exactly what I have been describing these past few weeks (month). The game logic is written in C, but no standard C library functions are called. Instead, indirect system calls are used and, to completely liberate the game from a C library, the indirect system call functions are implemented in x86_64 assembly code, as is the startup code, and the few math functions used.
The game runs on the Linux framebuffer, X is not needed. In fact, the game will not run under X, you must leave X in order to play the game unless your X server is rendering to the framebuffer as well. The next stages of this project will be porting the game to run with DRM/KMS and then once again porting the game to run in Wayland. X11 will likely never be supported. Windows will never be supported, not because it is not compatible with Windows, but because Windows is not compatible with the game.
Anyways, have fun. That's all for now. Peace!