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!
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.
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; }