top of page

Salty Seas

Salty Seas is a top-down sailing game prototype created while I was attending Savannah College of Art and Design. Salty Seas's develop began as a sailing system created for my Game Systems class, but I continued working on the project after completing the course. The game design and coding was created by me, as well as the models and particle effects. Sound effects are from freesound.org and streambeats and allowed for fair use. I am continuing to work on this project, and hope to eventually release it for download on itch.io.

Salty Seas Current Development
title_screen.png

Single Player | Top-down | Adventure 

All assets & coding created by Kevin Kincaid

Salty Seas is a top-down, third person adventure game set in a fantastical version of the Age of Exploration created in Unreal.  Players navigate through treacherous waters and battle dangerous pirates surrounding different islands to deliver cargo.

I began developing this game in my system design course at SCAD.  My core focus was to create a system that simulates water conditions and a navigation system that relies on players adjusting individual sails and rudder to travel across the ocean.​

February 2023 - Ongoing

This button takes you to Itch.io, where the latest game version can be downloaded. Current builds only work on Windows OS

Salty Seas Playthrough

System Control: The Ocean Brain

This button takes you to Itch.io, where the latest game version can be downloaded. Current builds only work on Windows OS

ocean brain.png

The Ocean Brain Blueprint class serves as the core element of the game systems. There is one Ocean Brain in each level. In addition , the Ocean Brain communicates information to other key Actors.

Function 1: Spawn & Organize Sea Tiles

The Ocean Brain controls a grid of SeaTile Actors spread across the map. The OceanBrain will keep the Tiles aligned with the grid, and can spawn new Tiles in editing mode. 

SeaTiles apply water forces in a specified direction. The angle and force can be changed in editor. SeaTiles also have a particle system to give visual feedback to players.

sea tile 2.png

SeaTile Variables

seatile aspects.png

Function 2: Locate SeaTiles for other actors

While a game is running, many different actors require accessing SeaTile they are located on. The OceanBrain is the actor that controls the search functionality.

The actor maintains:

  • An array of All SeaTiles

  • A map of grid coordinates of SeaTiles (X, Y) matches to the Tile's position in the array

  • A set of the SeaTiles currently within the active radius

When a boat wants to locate the Tile, the search sequence checks:

The search sequence is modified for certain actors that need to track Tiles outside of the Active Set

Function 3: Track Game Time & Alert connected actors

Salt of the Sea has repeating in-game 'Days'. On a level, time slowly passes, and weather slowly changes over time.The Ocean brain updates the appropriate actors at a specific intervals. The SeaEffects and Wind Systems keep track of when they are supposed to start and stop, and how they should impact the surrounding area.

Wind Systems only control Windboxes. The reason for this middleman actor is so that multiple Windboxes can be easily connected and create more complex areas of effect without having to control each actor individually.

SeaEffects include things like water currents, storms, and whirlpools.

All Ship Part Actors that are spawned by boats are child classes of one of 5 main subclasses. This organization broadly defines the base behavior, but allows ships to have varied pieces. For instance, some sail classes propel players faster than others.

The boat has an array of each subclass. When it spawns in the Ship Part, it adds a reference to the appropriate subclass. In addition, if the actor is not a Hull, it is added to the 'Control' Array. This array is used so the player can switch control of ship parts.

Clip.png

The UI in the top right reflects the 'Control' array. Switching between elements allows the player to directly control each part of the ship. The methods of control vary by subclass but the player can potentially:

  • rotate the ship element using  the WASD keys

  • activate the ship element using the E key

The control scheme is adaptive, and will continue to work even if the player upgrades the ship with new Ship Parts.

Subclasses Defined

Upgrade & Adapt

Using this modular system not only allows for a wider variety of non-player ships, it also allows players to change their ship to fit their playstyle.

At Ports with Shipyards, Players can select 'nodes' on their Boat to upgrade, and even replace existing parts. There are limits on which elements can be built where on the boat, but as more Ship Parts classes are added, this gives players a significant amount of customization.

The Sum of It's Parts: Modular Boats

ship parts.png

The boats in Salty Seas are actually several actors working in tandem. The main actor consists on only the physical Hull of the boat, but none of the other pieces. Having the pieces of the boat be modular has benefits both visually and organizationally.

A Boat Actor spawns with prebuilt arrays of Ship Pieces based on the specific type of boat. This information is used to spawn in the Ship Part Actors, such as the sails or anchor, and arrange them on the boat

Mastering the Ship

The core idea behind this system is that navigating a sailing ship requires managing both water and wind conditions. This differs from other sailing games where the ship either moves to selected location or always has forward momentum. Players must react to the change in wind and water conditions and plan their route accordingly.

The second core idea is that navigating a ship requires a combination of many elements. The modular ship parts that make up the boat are controlled one at a time. Players must utilize all the elements of the ship in concert to travel as desired.

Screenshot (20).png

Three Factors to Movement

boat_1_B.png
boat_2.png
boat_3.png

Hull

Each ship has several hull points. These points receive a vector from the sea tile they are located on. Boat movement is calculated by averaging these vectors. The boat will also rotate based on the water currents.

Sails

Sails respond to wind. When a gust hits a sail, the boat moves in the direction the sail is angled. This force increases as the sail's direction aligns with the angle of the wind. Sails also contribute to boat rotation

Rudder

The rudder only rotates the ship. The force of rotation depends on how fast water is moving past the boat. The faster a ship is moving, the more the rudder will turn the ship.

anchor_inactive.png
ship_inactive.png
rotator_inactive.png
rudder_inactive.png

Development Process

Initial Concept

The course assignment was to produce ideas for three different game systems and to develop one of them.  My best concept, based on feedback, was a seafaring game system that incorporated aspects of real sailing.  Players have to account for water currents and wind direction.  The system uses a tile-based grid to reduce calculation costs. My goal was to deliver a fun and effective sailing mechanic that was simple to understand. 

CaptureSailing.JPG

Four main sections of the system:

  • water tile grid and brain

  • boat navigation

  • wind currents

  • moveable hazards

 

The overall plan is shown below.

Sailing Seas Treatment.jpg
Sailing Seas Treatment (1).jpg

Paper Prototype

The prototype consisted of the tile grid, a single boat with a rudder and sail, a chart of wind directions, and a counter to track the time of day.  Each grid piece had a direction and water speed, and a lettered column that corresponded to 'wind zone.'

IMG_5560.jpg
IMG_5571.jpg
IMG_5574.jpg

Complete turn:

1) Before moving, players can adjust the boat.  The rudder and sail can be adjusted by 45 degrees.  They can also raise or lower the sail.

2) The boat moves based on which tiles the hull points occupy.  Each hull point moves according to the arrow on its tile, and the overall movement of the boat is a rounded average.

3) The boat rotates based on the rudder compared to the direction of movement.

4) If the sail is active, the player looks at the wind chart.  They find the current time and the tile section letter.  If there is a wind current, the boat moves accordingly.

5) The turn ends, and the time counter moves forward by one.

The paper prototype worked well.  It demonstrated the system, and the other students and professor understood the process.  One problem was that the boat often faced perpendicular to the current, but I presumed that this was a result of integer-based nature of the prototype.  Since the digital version would use float-based values, I expected this issue would disappear.

Digital Prototype

The base system was the same and I now accounted for continuous calculation of movement.  I spent the majority of the time developing data structures for efficient information exchange.  I also added these features:

 

  1. Each tile now has a depth.  When the tides go out, the tile turns to sand and the boats run aground.

  2. Boats now drop anchor in order to hold their position.

  3. Boats track boat stress, where if a player puts too much strain on the boat without rest, the boat sinks.

 After completing the core system, I added hazard elements.  Rocks can damage the hull and push the player away.  Other hazards are the straight, whirlpool, and storm.  These hazards affect wind and water currents and can attach to a spline actor for movement. 

Salty Seas Version 1 

Lastly, I added cannons for fun and to enhance the theme beyond the scope of the project.  Overall, I completed all elements of the project development map, with the exception of larger and more complex boats.

Version Two

Once the course ended, I developed this version to submit to SCAD's student Entelechy competition.  The redesign includes parent and child classes for boats instead of a single boat actor class.  Now, when a boat actor is placed in the level, it will spawn and attach necessary actors (sails, rudder, cannons) based on the child class's settings.

This change required a new control scheme.  Previously, one pair of keys controlled the sail, and another pair controlled the rudder.  Now the player controls one ship part at a time:

 

  • Left/Right keys turn the current ship part

  • Space bar triggers an event (such as firing a cannon or lowering the sail)

  • Up/Down keys change the selected ship part

  • Players can click on the UI display to select a different ship part

evidence.JPG
Screenshot (106).png

After rebuilding the player input system, I added computer-controlled boat movement for NPC ships. There are three behavior settings: 

Pirate - waits in place and searches for the player.  When the player passes within range, the pirate raises anchor and pursues the player while firing cannons. 

Civilian – ship follows a set course.

Navy – (ally) waits in place and pursues a pirate ship if they pass by

Screenshot (110).png
Screenshot (108).png
Screenshot (109).png
Screenshot (107).png

I added tasks for players to complete. In each level, players must either deliver amounts of a specific cargo or earn gold.  When a ship reaches port, players can open the trading panel to buy or sell items.  Destroying enemy ships also releases collectible cargo boxes into the water.

I added a menu, instruction screen, and improved the visuals.  I replaced the arrows that indicate water currents with particle systems that produce waves.

Ongoing Development

Salty Seas is still undergoing development, and is very much in the prototype stage. The next step is overhauling the UI menus systems that the player uses to interact with ports. When finished, the Ports will now offer:

  • Sailors Quarters - players can hire new crew members which may give bonuses to the ship

  • Naval Offices - players can accept quests

    • quest rewards and the system for tracking quests will also be improved

  • Inns - players can rest until a specific time of day

This will also be accompanied by improvements to the tavern so NPCs have more advanced dialogue and interactions.  

All these changes will support this project into having more open world levels, rather than the limited, largely linear maps currently included. I hope to have this core feature set finished by March of 2024.

bottom of page