Swan Song
Swan Song is a cooperative rouge-lite where two bards battle through an everchanging dungeon using the power of their music in search of lost melodies. Players will collect lost lyric fragments as they move through the dungeon, granting them new melodies that they can play to activate powerful abilities. Successful bards who reach the end of the dungeon will get to claim a lyric fragment to pass to the next generation of bards passing through the dungeon. Lyrics not chosen will modify the dungeon adding new rooms the player can stumble upon, providing new challenges.
Swan Song was created by Times New Ramen as a project for the Ubisoft Game Labs Competition 2020.
Times New Ramen:
Producer: Owen McCready
Designer: Ryan Swanson
Designer: Jack Long
Programmer: Chun Tao Lin
Programmer: Simon Steele
Artist: Brooke Pendleton
Artist: Jennie Castle
Artist: Hannah Mata
On this project I served as the combat and systems designer, working to design and integrate our complex systems. I also designed and implemented all the dungeon rooms. With our time frame and general scope of the game, I had my hands on many different components on the backend to help deliver this game. This project was a massive learning experience working in unreal where I learned the material editor, particle effects, and lighting.
Lyric Fragments:
Lyric fragments are a central system to the rest of the game as each fragment affects combat, dungeon generation, and enemies in a different way. At a most basic level fragments are items found scattered in the dungeon. These Fragments are collected by players and define the abilities they can play. Each fragment gives the player a string of notes that they can play to activate the ability effect. Each ability has a single-player effect when using it solo, and a multiplayer effect when paired with the other players.
As our rooms are generated procedurally per round, the lyric fragments are vital to the generated rooms on a given run. On the successful completion of the dungeons, each player chooses a fragment to leave behind. The fragments left behind are then the abilities the next set of bards will start off with, but more importantly, they will also modify the dungeon in different ways, creating different challenges in the next run.
There are 4 total lyric fragments players can collect while playing. When combining the combat system with enemies and the dungeon we wanted the play to be like a dance, where the players are the band controlling the space with their music. Because of this, each ability and dungeon modifier was designed to affect how you control and move about that space.
Cooperative Combat:
The challenge of the Ubisoft competition was making a cooperative 2 player co-op experience. Ultimately we wanted to create a social experience where players must master communication and form a joint strategy to deal with challenges. Through the combat. We wanted players to create synergy between each other to overcome obstacles. We wanted them to share a common sense of achievement when they successfully work together to defeat enemies. Cooperation is a necessity to make it far in the dungeons
Each player is a bard and uses their instrument to make an attack. There are two types of attacks players can make notes and abilities. The notes are the most basic form of attack, fired off when you press the face buttons. When you combine a correct combo of 4 notes you will use a special ability. When 1 player performs a correct combo of notes the other player has a short time to pair their own combo of notes. A successful combo pair between the two players increases the strength and effect of their abilities.
Through combining each other's music the two players are stronger, and together they form a band. If they don't play together the game becomes a struggle, but if they take the time to unite with each other they are a force to be reckoned with.
How The Game Decides What Notes to Play:
Every time the player hits one of the face buttons, a string value for the associated button is added to their array of strings called the combo queue. We track the notes that the player needs to hit on a diegetic UI element, so we need to check after every face button input if they are following along the correct combo. I send the combo queue and the current combo position the function below to check this.
It reads the currently selected fragment and checks to see if the current position in the combo matches with the correct combo. The function then returns whether or not the player's last input matches the correct combo sequence for the associated fragment. If it's correct it continues on with the script. If it's incorrect, the combo queue will reset. If all the inputs are correct then it will trigger an event for the lyric.
I stored all the correct combos for each lyric fragment in a structure. Each element in the structure is made up of an array of strings. Storing this information in a structure made it efficient for me as the designer to change the correct combo sequences easily without having to modify the script itself.