1 of 1

CPSC 4160 – 6160 / Ballistic

MITCHEL MCFARLAND

Game Description

Ballistic is a retro FPS game that takes place in the far future where you have to navigate levels and defeat enemies. The main story involves you navigating 6 distinct mazes in order to reach the end. The exit of the maze only becomes clear as you defeat all enemies in the level.

The objective of Ballistic is to defeat all enemies in the game and progress to the next level. Each level has a variety of enemies that will try to defeat the player. With skillful movement and good aim, the player must dodge and shoot to kill all enemies.

Game Mechanics

The gameplay involves dodging and shooting in a dynamically generated area while trying to find an exit.

Key mechanics include managing your health and using the mouse to aim while moving.

Technical Description

Ballistic was developed in Python with the several libraries, including Pygame and Numpy. The game runs at an unlocked framerate, allowing for very high responsiveness.

The game simulates a pseudo-3d space using a technique called ray casting. Each frame a β€œray” is sent from where the players view is in the game world. The game world is then drawn based on if the ray collided with a floor, a wall, or nothing at all. Using sin and cosine for the vertical and horizontal component calculations respectively, this can be done smoothly and seamlessly in a complete circle around the player.

The game also uses a technique called y-shearing, which warps the game world as you look up and down in order to create the effect of perspective correct up and down camera movement. This is limited, however, so as to not exacerbate the warping.

Controls

The controls involve using W, A, S, and D in order to navigate the game world. Moving your mouse will move the camera and also aim your gun.

Game Limitations

Future Work

Future iterations may experiment with more complex map design, more weapons and enemies, and possibly even switching to a different language or game engine for a proper 3d experience.

Game objective

Game Screenshots

Players can combine skillful movement and good aim to defeat the enemies.

Firstly, due to nature of Python itself, a full 3d renderer would not have been very performant and therefore out of the question for a first-person shooter. The ray casting approach allows decent performance while still maintaining the idea of moving in a 3d space. However, this has many downsides as well, such as limited up and down aiming, being unable to render bumpy terrain, and many others.