Background

My first few attempts at making Unity games were non-starters: one was a rudimentary sandbox game where I implemented basic placing and an inventory, and another where I implemented custom biome generation with a procedural mesh generator. Both of these games didn’t make it very far because I didn’t have a clear vision of what I wanted to make.

However, this changed when I started my 3D Game Programming class at San Diego State in the Fall of 2023. The two big projects for that class were the games that taught me a lot of what I know about game development. These were the ball speedrunning game and the multiplayer kart racing game. I’m not great at naming things.

Ball Speedrunning Game

Ball Game

This game is a fast-paced 2D platformer where you string together combinations of jumps and dashes to speed to the end of the stage. It has checkpoints and a timer so you can time your scores, we had fun for a couple days trying to beat each others times.

The ball speedrunning game was an important first step because it gave me the two main foundations I wanted to focus on: player input management and state machines for player movement. I also spent a lot of time figuring out the Unity Editor, I built the stages by hand without prefabs because I didn’t know how they worked at the time. A lot of things need work in this game, polishing the movement and stages being the big tasks.

Multiplayer Kart Racing Game

The vision for this game is to have technical movement with complex item mechanics to add a higher skill ceiling to formats like Mario Kart. It has two custom maps, a couple of items, and two vehicles to drive; all systems are in place to add more, I just don’t have the time to create that kind of stuff. The driving mechanics work well, but need to be adapted to multiplayer.

I spent a really long time working on this game and it’s in a semi-decent state, but the branches have diverged by hundreds of commits now. The main branch is a classic OOP ball-of-mud, and I stopped working on this project when I started breaking it down into Unity packages. Now that the package development is complete, I need to come back to this game.

All that said, I learned a lot during the devlopment process of this game. I learned how multiplayer networking worked by teaching myself from online tutorials, and have gotten to a really good state to go back and strengthen everything. The biggest hurdle I faced during this process was understanding the difference of the client and server and how they interact. This project set the foundations for Lumberjack Simulator and I hope to return to this one in the future.

Future goals:

  • Client side prediction
  • Clean, technical movement
  • Testing suite to ensure mechanics stay consistent and watch for regressions

Roadmap:

  • Stronger server/client [0.6.2]
    • Leave from lobby
    • Lobby properly disconnects client and clears their data
    • Disconnect messages
  • Add out of bounds [0.6.3]
    • Create hitbox, that adds effects to the kart (i.e. speed or slow)
    • Waypoints designate normal track and the edge warning tracks on each side
      • Interpolate between waypoints to create boundaries that put the player on the slower speed area and out of bounds
      • Interpolation creates hitboxes which will enforce the effects
  • Items overhaul [0.7]
    • Re-work teleporter to make it target based
    • Make the lightning bolt work better
    • Make boost canister auto drive at max speed
    • New item: Heat-seeking missile (red shell)
    • New item: Hack code (disables 1st-3rd place, like blue shell)
  • Shield mechanic [0.8]
  • Polish for release/Re-evaluate features (1.0)

Backburner:

  • Better AudioSource
    • Add a class (AudioController) that pairs with an audio source
    • Add variable volume using AnimationCurves
    • Add panning between multiple AudioSources
  • Statistics tracking
    • Track finish position, item usages, distance driven
    • Statistics tracking can be used for challenges
  • Scalable server
    • Upgrade server panel to readout important information
    • Implement LocalPhysics to allow scene stacking
    • Fix GameLobby and NetScene controller to properly split up scenes

After release, new maps every two weeks