Fish & Feather
"Work together as a seagull and a fish to overcome obstacles and reach the ocean"
Role: Programmer
Development time: 2 months
Team Size: 6
Engine: Unity
Methodology: Agile
Programming language: C#
Project management: Trello
Tools: Git & GitHub
Genre: 2D Local Co-op Puzzle-Platformer
Platform: PC
Year: 2025




About Fish & Feather
Fish & Feather is a 2D local co-op puzzle-platformer created by a multinational team of six as a school project at Kajaani University of Applied Sciences. We developed it in Unity with C# over approximately two months.
We wanted to create a co-op game where the players could not progress without each other. One player controls a seagull that must remain in the air, while the other controls a fish that needs to stay in the water. The seagull can carry the fish between different areas, while the fish can use bubbles to interact with obstacles. Their different abilities encourage the players to communicate and work together to reach the ocean.
I worked as one of the two programmers. I mainly developed the seagull’s mechanics, player input and several shared systems. I also helped connect the work created by the programmers, artists and other team members.
Project Goals
Our main goal was to create a playable local co-op demo where both characters felt different but equally important. The levels needed to include obstacles that required the players to combine their abilities instead of progressing separately.
We also wanted the game to support keyboard and controller input. Because two players could use different devices, the controls and instructions needed to remain clear for both players.
Gameplay
Two players guide a seagull and a fish through four sections while trying to help the fish reach the ocean.
The main gameplay features include:
-
Local co-op for two players
-
Flying, gliding and dashing as the seagull
-
Swimming and shooting bubbles as the fish
-
Carrying the fish between bodies of water
-
Limited survival time for the fish outside water
-
Obstacles that require both characters
-
Checkpoints and shared respawning
-
Keyboard and controller support
-
Instructions based on each player’s input device
If either character dies, both players return to the latest checkpoint. This means they need to pay attention to each other and complete each section together.
Production And Teamwork
Our team included a producer, a designer, two programmers and two artists. As one of the programmers, I worked closely with the other programmer because the two character systems needed to interact with each other.
We divided the programming work between the fish and the seagull, then regularly combined and tested our systems. I also maintained the Technical Design Document and helped integrate graphics, animations, lighting, music and sound effects into the game.
Because many features depended on work from different team members, communication was important. Character mechanics, level design, animations and visual feedback needed to be tested together rather than separately.
Challenges And Solutions
One of our main challenges was the physics interaction between the two characters. Because the seagull could carry the fish, their collisions sometimes caused unpredictable movement and made the characters difficult to control.
I adjusted the collision system so that the characters only interacted physically when the seagull was picking up the fish. This made the carrying mechanic more reliable without affecting their normal movement.
Playtesting also showed that the original keyboard controls were uncomfortable for two players. I added controller support, input-device detection and instructions that changed depending on the device used by each player.
My Role
As a programmer, I was responsible for:
-
Programming the seagull's movement and flight
-
Developing the dash and carrying mechanics
-
Connecting the seagull and fish systems
-
Implementing keyboard and controller input
-
Adding input-device detection
-
Creating device-specific instructions
-
Adjusting collisions and physics interactions
-
Maintaining the Technical Design Document
-
Integrating graphics and animations
-
Integrating lighting, music and sound effects
-
Working on scene transitions
-
Testing and debugging the complete game
​
I worked closely with the other programmer because many of our systems depended on each other.
Playtesting Feedback
During the first playtest, we mainly focused on the controls and whether players understood that the fish and seagull needed to work together. The basic idea came across well, but playing with two people on the same keyboard was not always comfortable.
Based on the feedback, we decided to support both keyboard and controller input. I created a detection system that allowed the players to use different control combinations, including two keyboards, a keyboard and controller, or two controllers. The on-screen instructions also changed depending on which devices were connected.
Players enjoyed the concept, but many felt that the game was too short because the first version only included one puzzle. Before the second and final playtest, we added three more puzzles to make the experience feel more complete and give both characters more opportunities to use their abilities.
During the final playtest, players especially liked the graphics and the short cinematics between puzzles, which showed more of the story behind the game. They also liked that it was a fun local multiplayer experience that could be played together in the same room. A few small bugs were found during testing, but they did not have a major effect on the gameplay and were fixed afterwards.
Outcome
We completed Fish and Feather within the two-month development period and published the playable Windows demo on itch.io.
The finished demo included four sections, two characters with different abilities, connected co-op mechanics, checkpoints, keyboard and controller support, and a complete journey from the beginning of the level to the ocean.
The project gave me experience developing an important part of a larger game while working closely with programmers, artists, a designer and a producer.
What I Learned
Fish and Feather taught me how challenging connected co-op mechanics can be. The two characters could not be developed as completely separate systems because their movement, collisions and abilities needed to work together.
I also learned more about physics, controller support and designing controls for two local players. Playtesting showed us problems that were difficult to notice during development and helped us make the controls more comfortable.
Most importantly, I gained experience communicating with another programmer whose work depended on mine. It showed me how important regular integration and testing are when several systems and team members need to work together.