An in-depth developer account of God of War’s ambitious nautical navigation system
The boat was a fantastically interesting feature to work on. For a long time, going as far back as God of War II, Cory wanted a boat in the game. In the previous games there wasn’t a narrative conceit to justify the addition of a playable boat. But, for this reimagined God of War, we made exploration and storytelling big pillars of our focus… and with Caldera Lake as our hub environment, it finally made sense to bring a playable boat to God of War.
God of Oar
The first boat prototype was basic. We placed Kratos in a seated position and turned on a boat model. Here we adjusted Kratos’ speed, friction and general movement model to start to get a feel for what it would be like control a vehicle in our game.
With the initial prototype in place, we started doing a lot of research. Early on, we made the decision that Kratos would use a single paddle to propel the boat. This decision meant we had more in common with a single person canoe than other types of boats, at least for our animation reference. After watching a lot of videos of canoe paddling, we had an idea of how Kratos would animate to paddle the boat. Now was the time to capture some animations, so we built a life-size cardboard boat in one of our mocap stages.
One of the challenges of a canoe-style single-paddle boat was just how many animations it required. Anytime the left stick was moved, the boat moved, and Kratos with it. This meant turns, moving forward, moving backward, and rotating in place all required individual animations.
Additionally, it had to look accurate when Kratos changes the oar positioning from left to right. Depending on where Kratos is during his paddle stroke animation I set up timing windows which allowed the oar to change from side to side, and maintain the correct “phase” as it crossed back to the other side. The quality of these transitions, which respond quickly to player input, is one of the little details I’m most proud of.
Right wheel drive
Along with the visual appearance of movement, we spent a lot of time tuning the “feel.” We tried a number of different setups. For a long time, we required you to press a “gas” button to move the boat. This was interesting and allowed us to try some other gameplay features – such as a timing-based speed boost – but, ultimately it was more important that the player felt as though they could explore without any distraction.
When in a boat, you’re expected to experience some inertia. For example, if Kratos paddles the boat, it should continue moving a bit based on the previous speed. We continually tuned the amount of acceleration, deceleration, and inertia. We wanted the boat to feel immediately responsive, but we also wanted the boat to have a feeling of weight. It was important that it was satisfying to get the boat to full speed and maintain that speed on open water.
Turning was one of the most difficult aspects of the boat to get right. The new God of War has a strafe navigation model, which was a departure from the previous games. This was great for precision axe throwing and to support our cinematic camera, but the boat is largely about exploration, so requiring the player to move the camera to steer the boat deprived players of their ability to look at their surrounding and take in all of the details of Caldera Lake. With that in mind, we made the decision to keep all of the boat movement on the left stick.
Once we had control firmly planted on the left stick, we continued to modify the turn rate. Players consistently gave feedback that the turn rate was too slow. But, when we’d increase the turn rate we would get complaints that the boat was uncontrollable. Regardless of the turn rate values we used, we continued to get this feedback.
When I’m not making games I usually want to be in a car, not in LA’s notorious traffic, but in LA’s fabulous canyon roads. Occasionally, I drive on a track. When you drive on a track, often you are going to hear people say they prefer rear-wheel drive cars. One of the reasons is that an experienced driver can use the torque from the rear wheels to help steer the car. This is called oversteer.
Originally the boat had its “power” coming from the center. We effectively had an “all-wheel drive” boat. We moved the “power” to originate from the rear of the boat. Now we had a “rear wheel drive” boat. Immediately, play testers not only had the perception that the turn rate was increased, but that the boat turned more predictably. They could now oversteer the boat to use its “power” to position it where they expected it to go.
Snap, Kratos and no pops
The most challenging feature of the boat was getting in and out of it. It was a complicated problem to solve. So long as the player is facing the boat and the interact prompt is available, they can enter it. Because of our close camera, we always want to ensure a high level of visual fidelity and we can’t hide anything. We also didn’t want to snap or “pop” the player into a position to enter the boat. We wanted a smooth and seamless transition into the boat, regardless of the player’s entry speed or angle.
To get into the boat, we ended up spending a significant amount of time on a system which would be used throughout the game whenever we needed the player to align to an object (the boat, chests, doors, etc.). This system leveraged our core navigation to guide the player along a path to their destination, always taking the shortest possible route and matching the entry speed of the upcoming move. Once we had that system implemented, the player was able to seamlessly enter the boat from any direction or speed.
Getting Kratos to smoothly enter the boat at the whim of the player was one thing, but what about getting the son in the boat? Because Kratos could be entering the boat from any angle or speed, which meant his son could be as well. He may be attempting to lead Kratos to something interesting in the world, or he may be following. Because the son could be in so many different states, we had to create a system for him to reliably enter the boat.
Every dock and beach has a built in area we dubbed the “son no-go-zone”. If you notice as you run up to the boat, the son will hang back a little bit. When you hit the button to enter the boat, we limit your camera rotation. This allowed us to position the son based on the angle and speed Kratos is entering and have the son enter the boat seamlessly with Kratos.
I covered getting into the boat. Getting out of the boat was another big task. First, let me focus on docks. Much like entering the boat, the player can be approaching a dock from any angle or speed. As always, we want to maintain great visual fidelity while also getting you out of the boat as quickly as possible. To accomplish this took a bit of math. When you press the interact button to exit the boat, we figured out the angle and distance between the boat and the dock.
From there, we chose between 10 different animations, based on how far we needed to rotate the boat and if the dock is more on your left or more on your right side. Once an animated move is selected, we use an internal technology called “motion warp” to adjust the animation, aligning the boat to the dock.
Beaches were uniquely complicated as well. With the docks, we aligned the boat to a fixed point when the player pressed the interact button. With the beaches, the player can beach the boat almost anywhere the boat is pointed. To guarantee the boat is beached on the sand and not in a rock, we queried the navigation mesh. Navigation mesh, or navmesh, is what the AIs use to know where they can navigate in the world. Level designers used a navmesh generation tool to create these navigable spaces in their levels. Because we knew the navmesh tool would only generate navmesh in an area free from obstructions, we knew we could reliably use this to choose a safe beaching location.
Tell me a story, Mimir
The boat banter system got some much-appreciated praise. When Kratos finds Mimir, he becomes a great companion on the boat, regaling Kratos and Atreus with the history and lore of Midgard. But, like other systems I described, we had to ensure the player had constant control and could enter and exit the boat whenever they wanted.
The banter system conditionally played back audio clips based on events which happened in the game. When these audio clips are played, they are actually many small clips all stitched together. If you stay on the boat to listen to Mimir, the audio will play as though it is one long contiguous story, but if you exit the boat, it branches to an outro which we made sure was shorter than the animation to exit the boat. This allows Mimir to pick the story right back up the next time you are in the boat.
It was an awesome responsibility to bring a boat into the God of War franchise. The boat was a massive feature made up of a lot of little details. It was an amazing team effort… made possible because of the dedication of the incredible team here at Santa Monica Studio. It’s been amazing to read the response from all of our fans, and personally gratifying to see the response to the boat.
Some additional boat details
- There are over 600 unique animations for the boat
- There are more than 750 lines of dialogue on the boat
- Alfheim has a unique boat, oar and light
- Every enter and exit animation is different when you acquire Mimir
- On docks the boat knows if it’s on the left or right side and the enter/exit animations adjust accordingly
- The DualShock 4 LED changes to an “aqua blue” while you are in the boat
- Even though it stays in the boat, the oar is considered a weapon pickup in the game engine
- At one point there was a bug where Kratos would be able to exit the boat holding the paddle