A downloadable game for Android

Giant Punch 3D was my ninth game I was the Solo Developer of, and the sixth game I worked on at Unstoppable Games. This was a great change from the previous projects, it takes place in the fighter genre. In the game you are a fighter in a boxing ring who has to run around and collect meat to grow, once you think you're big enough you can run to the opponent to start a fight. Whoever's the first to KO loses.

Game Mechanics:

  • When either character is almost dead and the other character is throwing the final punch that will kill them, the game will go into slow motion for about a second to emphasize the punch. Camera shake is amplified as well.
  • Implemented opponent AI that dynamically finds different meats and targets them along with a callback that changes its targeted meat if the player steals it while the AI is trying to target it.
  • When all the meats run out the player is forced to the center to battle the AI opponent
  • Created a system to handle combo punches so they are chained together smoothly. When one fist is at the end of its punch animation, if the player is tapping it'll switch to the next is vice versa.

Challenges & Solutions:

  • When the characters enter a fight, they have to position themselves correctly so that it looks good and he's not out of bounds. To achieve this, I decided to check which character is closer to the center of the boxing ring; Whichever that is, we have to move their position to be positioned to the side of the other player as well as programmatically pick the new camera position.
  • When first prototyping, we found that once a player entered a fight early by accident, it wasn't fair for him to not be able to leave. To fix this we added a "RUN" button akin to the mechanic in Pokémon that allows you to leave a fight early.
  • We needed a way to show that a character was getting more powerful, we settled on creating a particle effect and playing a short animation using DoTween for scaling him in a cartoon way to his new desired size. Now a character twice as powerful will be twice as large as the other.
  • We wanted to make the scene livelier, so I was tasked with creating a crowd. What I did was create a "crowd member" prefab who simply had the mesh and animations, and then I created a crowd manager that would randomly pick a select amount of crowd members to play a cheer animation every few seconds.

What I'd do differently:

  • If I were to redo this project, I'd first off likely use Animancer, I've fallen in love with this plugin, and it's been great to use. It's easy to define transitions and control the animations right from code.
  • I'd for sure make the enemy harder, currently he's actually hard to lose against, I think it'd be fun if he was more difficult to beat, as well as a random chance for if the "RUN" button works or not.
  • Along with all of this, I'd work on decoupling the code, and adding some sort of dependency injection framework like Zenject.
  • Although this project was really small, this would be for if I continued it and made it larger. A smaller project like a prototype like this is just fine without dependency injection.

Key Takeaways:

  • In this project I had a ton of fun creating some combat mechanics as well as simple AI to create a fun to play fighting game. I learned how to dynamically go from player controls to AI controls, more about producing great game feel, combo system, and much more. This project has served me well in equipping me with new knowledge for the future.

Download

Download
Giant Punch 3D.apk 53 MB