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
Now, I would like to actually introduce the game:
Basically, The Return is an updated version of my earlier OpenGL game, Untitled
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
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
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!