Golf Run

Gameplay Programmer/Technical Designer
Project Overview
Golf Run is a top down, 2D mini-golf game where the hole has a mind of it's own! Make your way through all 18 levels and try to get a high score while the hole runs away.

Throughout the game you'll experience a variety of different level layouts and obstacles that will keep you on your toes as you attempt to navigate toward the hole. Later levels incorporate a gravity changing mechanic that diversifies level layouts and creates a unique way to traverse the area.
What I did
This project was an individual capstone project in which my primary focus was to demonstrate my Technical Design skills.

I created the entire project from the ground up in the Unity Engine, with primary focus being on the following things:

- Player/ball movement with the mouse
- Obstacles of multiple varieties
- Level design
- Hole AI logic
- General 'game feel' and polish
What Went Well
Player Controller
Though simple, the player controller works very well for this game. The simple premise being a click and drag power system where the player releases the mouse button to send the ball in a specified direction. I used a mix of different hard coded signifiers and inbuilt unity tools like the LineRenderer to create a nice signifier for the power of the player's shot. I also implemented plenty of lerping logic so as to make the varied steps transition smoothly and look good in motion. This lerping logic even helped me create the hole AI later on.
Hole AI
The hole AI was something that was simple in premise, but proved to be rather complex in execution. I coded the logic entirely from scratch, using an enum and switch statement in order to create a simple "finite state machine" that featured states for the following:
  • Idle (During player turn)
  • Start (Initialize required values for turn)
  • Charge (Animate power charge)
  • Release (Animate release, launching hole at end)
  • Return (Reset values for player's next turn, wait until hole stops moving)
The final result was an AI that randomly chooses a direction and smoothly animates each step of drawing their power back and firing. This creates a feeling that looks, while more robotic in nature, one-to-one with the way the player's ball traverses the level itself.
Smooth Camera Movement
Using Unity's Cinemachine plugin, paired with custom coded dynamic camera weight behaviors, I was able to create a camera that goes with the direction of the mouse, leading in the direction the player's shot would be heading as they charge. A more recent addition was a zoom feature, which causes the camera to be much more static and centered on the map as the player zooms out fully. The camera also follows the hole during it's turn. The logic of the camera weights are all coded in C#, though the smooth camera motions themselves are done through Cinemachine's inbuilt camera locomotion logic.
Development Challenges
Cut Level Editing Tool
Throughout the project I was met with few major issues, but one major intended feature for development ended up needing to be cut entirely. This feature was going to be a level building tool that would enable me to create rooms, set the dimensions, and set which walls were and weren't on said room. This would have enabled me to quickly create individual blocks to create levels out of.

The challenge came with attempting to meet with another designer who had offered to help me get started with working with tools in unity. They had become so busy that we were unable to meet at any point, and in my effort to balance my work between other classes/other features, I put the editor on the back-burner until we would have been able to meet. After a month of attempting to schedule a meeting with this individual I had come to the realization that it was too late to start it in order to meet my roadmap goals, and ultimately that it's simple nature would not have really streamlined the level creation process too drastically for me. All of these factors led me to finally cut out the goal of adding a level editing tool, which, while unfortunate, I feel this was the best choice considering the circumstances and limited use cases the tool would have had.
Project Burnout
Throughout the second semester I had been working on this project, I very quickly started running out of ideas on how I could iterate upon the experience. Initially my goals were to add a complex menu and sounds to make the state of the current project feel more polished and complete. The menu ended up being something I eventually decided was less important for the sake of my portfolio, as I was not aiming to spend weeks on UI, so I created a simplified menu and pause menu, focusing more on iteration upon game mechanics and level layouts/designs.
These level mechanics were hard to come up with, but through regular playtesting I was able to generate lots of good ideas for ways to diversify the levels within the two dimensional limitation of the game. One such idea was the gravity levels, which eventually sprouted into an entire gravity mechanic with location specific obstacles that would enable downward or upward gravity on levels that otherwise did not have it in order to create more unique ways for the player to traverse the area.
How This Project Led to Growth
Though this game is a relatively simple top down 2D game, I truly feel this was an important project for my growth as a game developer. This project was the first time I had attempted to go for truly polished experience, and using linear interpolation for a variety of different things enabled me to get truly familiar with how to apply interpolation to games to create a more polished feel. This knowledge would serve me well for other projects, and will likely serve me well for many more to come.

This was also my first self guided project, which helped me figure out how I can best manage my time when not relying on a team of other developers. With this came some challenges, but I have overcome many of those challenges, and continue to use the time management skills I've developed on several other projects to good effect, even when applied to team environments.

Overall this project has taught me many valuable lessons about how best to approach game-feel and polish from a gameplay programming/technical design angle. Skills I've learned throughout the creation of this project have enabled me to create and polish other projects to great effect. At the end of the day I feel truly proud of this project and how hard I had worked despite the self-guided nature of the project.

Want to work together?

If you like what you see and want to work together, get in touch!