Rowing Mechanic

On Thursday, we discussed our milestones and agreed that we want to have a prototype, a “minimalistic approach as fast as possible – prove of concept”, until the Christmas break. While rowing is one of the main actions that the players will perform most of the time and it is the unique selling point, it became one of the core features of our game and therefore is an essential part of the prove-of-concept.

The most important thing about this mechanic is the translation of real-world behavior onto the controller.

To give a quick summary of the design concept, the mechanic consists mainly out of the following loop:

(1) resting:

(2) diving the paddle into the water:

(3) pull the water with the paddle:

and (4) release the paddle out of the water:

The “resting stage” is for refreshing stamina that has been lost in a single row cycle. It is important to interrupt otherwise possible fluid movement with the controller. This tiny element and the half circular movement of the other stages differs this mechanic from old arcades like “summer games (1984)” and forces the player to team up with a friend.

The main questions were therefore: “how to get the correct information/numbers out of the input and how to translate those into a physical force to add them to the boat?“

My first step was to research for the controller axis input. Each of the axes can have a value between
-1 to 1. That concludes: the maximum values of the thumbstick can be represented in a circle on a coordinate system. At first, I tried to think about getting several arc lengths to calculate a force out of it but I had problems to include the framerate into the math. Finally, the key idea was to include something like a “calculation resolution“ into my concept.

The algorithm checks, if the player has moved the thumbstick over a given minimum distance, each frame. If so, the algorithm can now calculate the face by using the determinate between the origin of the coordinate system, the actual vector of the thumbstick and the last valid vector.

The resulting quantity is now applicable as a force to the boat. It also represents the players rowing performance: not using the full arc of the thumbstick for movement, results in a less effective rowing force.

I discovered some strange results by converting the algorithm into actual code and playtesting. After collecting some data and redrawing the situation on paper, I realized that the analog thumbstick movement is not a circle in the digital world: it is a square (see picture below). The consequences are that the calculated physical force will be greater if both axes are close to their maximum value (e.g. P1: 10|9, P2: 7|10) compared to a situation where only one axis is at its maximum (e.g. P1: 2|10, P2: 0|10). But by evaluating this situation, I concluded that the difference will not be noticeable by the player.


In the end, I exposed every possible variable to Unity to give the team, especially the designer, the possibility to tweak and balance the whole mechanic, including a debug mode that offers a minimal single player playability.

Actual result:

Leave a Reply