
SeaFeud
SeaFeud is an underwater arcade racing game where players ride on a variety of fast moving fish. Swap fish mid-race to dynamically change your abilities, items, and stats. With eight different characters and three different courses to select from, players can have endless fun racing under the seas.

Overview:
Trailer
Responsibilities
-
Audio implementation
I created and maintained an Audio Manager which stores references to all audio clips and optional attenuations. The Audio Manager can be understood as a wrapper with two maps for some commonly used nodes in UE5 that control audio. Of the two maps, one is a list of audio clips/sound cue references, and the other is a list of attenuation references. They provide convenience for designers by using the same string type key name. The Audio Manager will correctly handle whether the audio is played as 2D by checking whether the attenuation reference corresponding to this key is empty.​
I spend most of my time collaborating with the designers on the audio team to achieve the correct play timing and stop point of each audio. The audio on some UI level can be simply processed by the Button class of the Common UI, but most of the physical sound effects, props, and skill-related sound effects in the space require blueprint logic to correctly control the audio output.
I also implemented the section of the game settings menu to control the global volume, sound effect volume, and background music volume.
-
Pickups base class & Pickups related
​I implemented and designed the base class for pickups in the track, its data structures, and main overridable functions. The base class contains all the basic functionality needed by any pickup class. The new prop class only needs a simple override of the virtual function Using () and replacing the reference of the icon. It provides teams with a level of convenience in reducing the development costs of new props.
I implemented the use of Pickup on the fish pawn base class to communicate with the HUD class through the player controller to update the Pickup that the player is holding in real time.
I implemented a Pickup Box Actor (the instance that is picked up on the track) in a data-driven way to randomly get Pickup type functionality. Designers can control the audio, icon, and acquisition probability of each type of prop by changing the table.
-
Puffer fish
I mainly implemented the Pufferfish ability, which can use stamina to control the body to expand and bounce away the fish that other players are controlling. At the same time, it can resist Pickups used by other players when it is inflated. I worked with animation artists to implement skeletal animation when using the ability. I correctly handled the sound of the inflation process and the sound of deflation when the player is holding the ability button.
Postmortem
What Went Well
​
​​
-
The game was released on Steam and well-received
-
Exploring Nanite & Lumen before starting making the game
-
Thinking performance early
-
Code view weekly
-
Sharing knowledge between groups
-
Periodic QA testing
What Went Wrong
​
​​
-
Sometimes values are hard coded in the early stages of function implementation, but are not changed to data-driven in time later, causing designers to request new tasks to make the function controlled by the table
-
The functionality was not broken into multiple actor components in time so that multiple programmers could work on one actor at the same time
What I Learned
​
​​
-
Avoid hard-coding variables and comment properly​
-
Provide estimated time to lead team
-
The importance of communication and timely updates
-
Design and think from the perspective of how to make it more convenient for the team