Fish are Friends

Level Design

FaF Level Design Process

Game Scripting

Character controller, Shop, Endless level

Challenges

Obstacles to overcome

Project Overview

A Classic Endless runner

Fish are Friends is a classic endless runner game with a unique twist. Featuring a stylized pixel art style and an under water setting, the player traverses
continuously through four different stages each guarded by a final boss. With procedurally generated obstacles, enemies, and items, the player must swim as far as possible to achieve a high score and collect as many coins as they can. This is a two man team project created in Unreal Engine 5 with an expected release date on STEAM, IOS, and Android, Q4, 2024.

Level Design

The Idea

While swimming infinitely, each run is unique with randomized obstacles and enemies that try to defeat the player and an intuitive difficulty scaling changes attack patterns and spawn rates in real-time creating a unique and challenging experience each play-through. With the goal of surviving as long as possible without taking a single hit, the player can collect coins to buy power-ups that can be used to their advantage. Defeating the boss of each area will progress the player through different biomes, each area containing hidden secrets waiting to be discovered.

Design Goals

  • Endless Level
  • Procedurally generated
  • Collectable items and coins
  • Difficulty scaling

Game Scripting

Scripting Goals

  • 2D Character Controller
  • Simulated Physics
  • Coin Shop for Items and Cosmetics
  • Saved Game Data
  • Intuitive and Optimized UI
  • Obstacles, Enemies, and Boss battles

2d Character Controller

With the unique setting of the game it became necessary to create a 2D character controller from scratch that would be able to properly handle physics and react to the underwater environment in a natural way. With the use of simulated physics to handle the character movement, the controller functions seamlessly with in-game power-ups, enemies, and obstacles.

Coin Shop and saved data

In order to utilize the coins collected throughout the game, an in-game shop was implemented which gives the player purchasing capabilities. Through iteration and extensive play testing the in-game economy was balanced to give players a fair experience that still felt hard-earned. To properly implement the shop, save data was required to keep coins over multiple runs that could be used in the shop at any given time, even after the player leaves the game and comes back. This also lead us to saving other data such as distance traveled and total coins collected that could be used to show overall progress in game, brag to friends, and achieve a high score larger than anyone else. With inspiration from other games such as Cuphead and Jetpack Joyride, the UI for the shop was created and iterated on to give players an optimized and intuitive experience.

Obstacles, Enemies, Bosses

To create an endless level with interesting progression, individual spawners were created to spawn various obstacles and enemies randomly every run. Each enemies blueprint was crafted from scratch and tailored to give the player a challenging yet rewarding experience. Players must defeat a boss in each area with uniquely scripted attack patterns for the players to learn and overcome.

Challenges

Difficulties

To create an enjoyable and rewarding experience required a great deal of research of knowledge of endless runners. Through intensive play testing and research, every facet of the game was refined and fine-tuned to enhance the player experience. The enemies and bosses each have their own tailored attack patterns that give the player a complex and satisfying experience and the spawn rates and locations of obstacles and coins were adjusted to the desired values. Each power-up was also individually crafted and iterated on in order to achieve the desired affect, creating seamless gameplay and the player controller which handles movement, collisions, etc. was continuously play-tested until a version that functioned smoothly was created.

Another challenge faced in the process of development was properly saving data, displaying that data, and also being able to use the data in various ways throughout the game. I was able to script blueprints whose function was to save data such as distance traveled and coins collected that would be displayed for the player and could also be used to buy items in the shop.