Doggy Gotta Dance

Team: Solo Project

Role: Game Designer, Art, Programmer, Sound

Timeline: 5 months

DESCRIPTION

Doggy Gotta Dance is a cartoony rhythm-based boss fight that began as a Sheridan programming project. I was tasked with making a game that used state machines, and I took it as an opportunity to practice my skills in all disciplines of game design. I worked on the game into the summer, adding dynamic music, polished art, and animated menus. The end product is a fun bite-sized experience which I am incredibly proud of.

TOOLS

  • Unity + Visual Studio (C#)
  • Maya + Substance Painter
  • Audacity + Mixcraft
  • Mixamo

PROJECT SHOWCASE

You can also play Doggy Gotta Dance in browser on itch.io:

GAME DESIGN

BOSS DESIGN

I wanted the boss fight to follow a simple loop of the player observing and reacting to Doggy. To do this, I choreographed Doggy’s lunges with a bright red box before he attacks. This way the player could see where the danger zones were, and react accordingly.

 

Having attacks fall on-beat with the music was also done so players would know when they’d need to move.

 

Finally, I wanted skilled players to be able to dynamically increase the difficulty. To do this, I incorporated close-misses. If a player gets extra close to Doggy when they attack, Doggy will tire out quicker, but will also attack faster. This way, if players are confident enough they can collect close-misses and get a better game time in exchange for added difficulty.

INTEGRATED TUTORIAL

One feature I wanted to include in Doggy Gotta Dance was an integrated tutorial. This way, the player would be able to learn the game without scrolling through menus.

 

To accomplish this, I built the tutorial into the first phase of the game. If the player stands still at the start of the game, signs will appear showing them how to move and jump. These signs will not appear if the player immediately moves and jumps, however.

 

Additionally, Doggy’s first attack is always stationary, and although it appears to hurt the player, it doesn’t actually reduce their health. This teaches the player to avoid Doggy, while not punishing them on their first playthrough.

GAME DESIGN TAKE AWAYS

Although I am proud of my boss design, in retrospect I think playtesting during development could have benefited the game’s difficulty. I based the game on my ability to complete it, so once the game was released I found the end product to be a little too challenging for new players. I did adjust some attacks to be easier afterward, however more could have been done if I spotted the issue earlier. Because of this, I now make sure to playtest all of my projects with others around me during development so that I can get a wider picture of a game’s difficulty level.

GAME ART AND SOUND

ASSET CREATION

My goal with Doggy Gotta Dance was to explore the full pipeline for adding 3D assets to games. I settled on a cartoony art style early on and used Maya and Substance Painter to create all 3D assets.

 

For key assets such as Doggy, I created a reference sketch beforehand which I then built my model off of.

 

I also used a few tricks to achieve the final cartoony style. Although I did use PBR textures, I chose not to use normal maps or smoothness maps, instead opting for a simple flat style, I also used bright colours, heavy ambient occlusion textures, and a layer of post-processing to make the colours pop and help make the game come alive

RIGGING AND ANIMATIONS

I wanted Doggy’s animations to feel dynamic, so I learned how to create character rigs for this project. Doggy and the Player both use a standard humanoid rig, however I had to add extra joints to Doggy so that their jaw and eyes could be controlled.

 

I sourced most of my character animations from Mixamo, however all non-character animations were made by hand. For these animations, I used animation principles such as exaggeration and squash-and-stretch to sell the cartoony style.

 

The game animations originally felt a little lifeless, so I added IK controllers to Doggy and the Player so that their heads slightly turned towards each other during gameplay.

SOUND DESIGN

Because Doggy’s attacks always land on-beat with the music, as well as speed up over time, I had to find a way to dynamically adjust the game’s music.

 

To do this, I created a beat tracker that keeps track of the game’s tempo, which I then used to adjust the game music’s pitch. This not only keeps the music in sync with the attacks but also makes the game feel more energetic, as the music climbs alongside the difficulty.

I also wanted each phase of the boss fight to feel distinct, so I created variations of the boss theme that slowly add in instruments. These tracks were made using loops in Mixcraft. 

ART AND SOUND TAKE AWAYS

I learned a lot about art production from this project, as I got to explore the pipelines for asset creation, animation, and sound design. My work with asset design in particular taught me how important pre-planning is. Making necessary changes to a character in the concept phase is crucial, as once the model is textured and rigged it becomes much more complicated to even make small adjustments to the design.

PROGRAMMING

CHARACTER CONTROLLER

Since Doggy Gotta Dance is a reaction-based game, I wanted my character controller to feel snappy and responsive, but not to a robotic degree. 

 

To do this I created a custom character controller using C#. The controller takes a few frames to fully accelerate and stop, creating precision while still feeling organic. 

 

To allow for controllable jump heights, the controller also stunts the player’s ascension once they let go of the jump button. To discourage spam-jumping I also made the player’s movement slightly less responsive while airborne.

BEAT TRACKER

Because many of my boss fight’s systems rely on the song’s current beat, I created a Beat Tracker script to manage this.

 

The script tracks the elapsed times between beats and sets a public bool value to 1 on the frame that a beat lands. The script also keeps track of what beat the current beat is for events that only happen on every bar.

 

Since the song tempo dynamically changes, I also created a TimeScale script that returns a multiplier based on the song’s current speed, so that the beat can still be tracked even if the tempo changes mid-beat.

 

BOSS ATTACK SYSTEM

To manage Doggy’s attacks, I created a state machine script that cycles between priming, telegraphing, and attacking during each bar in the song.

 

I stored all information related to attacks in custom scriptable objects so that all patterns and animations can be loaded from one place.

 

The attacks themselves are Unity animations which Doggy’s head snaps to. This way I could easily keyframe dynamic attack movements rather than having to hardcode each position.

PROGRAMMING TAKE AWAYS

This project showed me just how important modular thinking is when it comes to programming complex systems. Although it took me more time initially to set up scriptable objects for my attack system, it made it much easier in the long run to implement/adjust the 15 attacks that are present. In even larger games, modular approaches only become more important. Even so, there are small adjustments I would make now to how I implemented certain scripts, but overall this project introduced me to a lot of common coding practices, as well as why they’re used.