Ski Boat Captain

Ski Boat Captain is a top-down boat racing and water ski trick-attack game set in 1980’s neon-Miami, created with Unity 5 for Android and PC. Players captain a boat, and must tow their water-skier in a race against time to achieve the top spot on the scoreboard.

I created this game as a personal project with the goal of learning more about Unity, C#, HLSL shaders, and mobile development. I am the sole programmer and artist for this project. I used Visual Studio, Maya, Photoshop, Audacity, and the Unity engine.

This project is no longer under active development.

View the GitHub repository here.

Download a playable (alpha) demo for PC here (20MB).
Download the playable (alpha) demo for Android here (29MB).
(If you’re unsure how to install an .apk file on your Android device, follow the instructions here)

Features:

Score Points by Completing Tricks and Collecting Pickups:

Players must race through multiple courses while achieving the highest score possible. Points can be earned by collecting pickups, completing jumps, grinding rails, and drifting the skier around dangerous obstacles. The player can use the boat’s speed and the skier’s momentum to guide the skier towards course objectives. The skier is a simple AI agent that scans its surroundings for potential scoring opportunities, then adjusts its velocity to guide itself towards them.

VCR-style Rewinding:

Time is rewound if the skier loses hold of the tow-rope for any reason. To enable this effect, a small buffer of the skier and boat’s past positions and rotations are captured several times per second and stored in a list. To rewind, the list is traversed in reverse order and the skier and boat’s positions and rotations are linearly interpolated between each point, giving the impression that they are moving backwards in time.

The visual effect of rewinding is achieved with a combination of 2 HLSL shaders and a small script that controls the UI. First, a post-processing shader is applied to the completed render texture of the current frame, distorting it with vertical sine waves. A UI canvas is overlaid on top of the rendered frame to display the VCR-style “REW <<” text, and two UI images are animated to flicker up and down the screen to simulate rolling bars of static. The static effect is achieved by applying a second HLSL shader to the animated UI images, coloring each pixel with pseudo-random value to simulate white noise.

Dynamic Barrier Placement System:

When building Ski Boat Captain, I developed a dynamic barrier generation tool to assist with defining the edges of the play area. This tool is a Unity script that automatically places visual meshes between two user-defined points. A unique mesh can be specified for placement at the ends of the barrier wall, and another mesh can be used to fill the spaces between the start and end positions. A user-configurable box collider is automatically generated to fit along the length of the wall. The spacing between the generated view meshes can be configured to any density, and position and rotation jitter can be added to each object for organic, unique-looking course walls.

A screenshot of the inspector panel of the dynamic barrier tool

 

The Unity inspector panel of the Dynamic Barrier tool

Touch-screen Controls and In-game Tutorials:

A tutorial popup is used to educate new players on how to play the game.

On mobile devices, players steer the boat by sliding their finger vertically along the left side of the screen. Steering is more dramatic when the player’s finger is near the top and bottom edges of the screen. Players set the throttle power by tapping horizontally within the area of the right side of the screen. The closer to the right edge of the screen that the player taps, the higher the throttle power.

On the PC, players use the arrow keys to accelerate and steer the boat.

Customization & Data Persistence:

Ski Boat Captain uses a serializable data container class to store scoreboard data, and Unity’s built-in player preferences system to store user settings. The following configuration options can be set:

  • Players can input a name of their choice, which is saved and displayed alongside their scoreboard records
  • Invertible steering controls
  • Enable/disable in-game music
Scroll to top