A downloadable game

The Project

The Game:

This game is a basic recreation of Taiko no Tatsujin. It's a rhythm game where the player has to press keys when the circles overlap with the rectangle on the screen. These overlaps happen in time with the music. Depending on the color of the circle, players need to play either Z or X when the circle overlaps with the active rectangle on the screen.


My System:

I wrote an Audio Engine System for our Engine System project. It was a pretty basic engine system which had an interface to Load, Play and Pause a sound. Using it was pretty straightforward.

The actual rhythmic calculation of the game was calculated separately from the sound. I ran into some issues in trying to synchronize that calculation with the audio thread and the render thread, but found a game-design solution to the problem in allowing offsets from the correct click time. Most players won't click precisely in time with the music anyway.

I also had to fix an issue in my original audio system where the audio source didn't actually reset after playing a sound. So users couldn't use the same source and play the sound multiple times without calling Reset(). To fix that, I made use of XAudio2's VoiceCallbacks to automatically reset the source automatically once the playback ended.

Luis's Collision System

Using Luis's Collision system was very straightforward. I just defined a Lua file for my circle colliders and the rectangle collider for my active area. The only issue I had was that I needed the ability to instantiate the same collider specifications for each of my circle game objects, but to do that I actually had to reload the collider file every time I was instantiating a new circle. The file I was reloading was a binary file so the overhead wasn't too bad, but it would have been nice to be able to load like a "blueprint" of a collider from a file, and then create instances of that blueprint.

The Graphics/Game-Object System

Using the graphics system we built in class was also pretty simple. Something I think was a good move was that my graphics system didn't take GameObjects at all and only needed a RenderComponent to know what to draw and where. The RenderComponent held a reference to the geometry and effect data for the circles and that just basically needed to be passed with different transforms for each circle.

Pretty straightforward.

What I learned in this class

  1. One of the most valuable things I learned in this class is the mindset of coding so that other people who use our code can use it easily. Somehow, I think we've spent a good amount of our time either writing our code in separate quarantined spaces, or we're one-man-programming-teams so we've never really had to worry about creating interfaces for other programmers. I think it's been a really valuable experience to learn to build interfaces that are user-friendly.
  2. Despite this not being a graphics class, I did learn a good deal about graphics and programming. Building a graphics system inevitably does that.
  3. Everything about binary files. Learning to write them and read them and debug them was super cool, very fun, and honestly stuff I had no idea about before this class. I think it's been really valuable.

Download

Download
DefinitelyNotJustTaiko_x86_OpenGL.zip 22 MB
Download
DefinitelyNotJustTaiko_x64_Direct3D.zip 22 MB

Leave a comment

Log in with itch.io to leave a comment.