Tugboat Terror

Back

This is Tugboat Terror! A frantic task manager where you play as Alessandro, a fish with human legs who wants to cross the swamp.

This game was made alongside four other computer science students and over a 14 week semester. It was made in a custom engine where many components were taken from a concurrent course where we learned about game engine architecture and design.

You can download it here on steam!

tt1 tt2

Code Examples

One interesting feature that I was able to create was a quick-and-dirty level editor given the time frame.

The idea was to make a textDark file where you could place the rocks and swarms quickly to make new levels. One of the best parts about the design of Tugboat Terror is that each level is the same but just a different color. This also would translate to the right minimap screen.

tt3

This screenshot shows how periods (.) are lined up in a rectangle where the length is calculated on initialization

The ampersands (@) are rocks and the percents (%) are swarms.


Doing this results in an exact grid however, which is easily fixed my adding a random length and direction to each obstacle which makes them appear more natural.

static Vector2D CalculateWorldPos(int oldRow, int oldCol)
{
    Vector2D newVec;
    // textDarkScalar, xMin are pre determined based on level screen size
    newVec.x = (float)(oldCol * textDarkScaler) + xMin;
    newVec.y = (float)abs((oldRow * textDarkScaler) - (rows * textDarkScaler));

    // This function is shown below too
    Vector2D randVec = MapDataAddRand();
    Vector2DAdd(&newVec, &newVec, &randVec);

    return newVec;
}


static Vector2D MapDataAddRand()
{
	// find a random direction and distance
	float distance = RandomFloat(0.0f, 10.0f);
	float direction = RandomFloat(0.0f, 360.0f);

	// apply that matrix to a new vector
	Vector2D vec;
	Vector2DSet(&vec, 1, 1);
	Vector2DNormalize(&vec, &vec);
	Vector2DFromAngleDeg(&vec, direction);
	Vector2DScale(&vec, &vec, distance);

	return vec;
}