Strike Back


Information

August 2022 – Current

Engine:Custom ECS engine with C++ and OpenGL

My Role: Producer and Programmer


Strike Back was my sophomore game project at DigiPen, created with a team of 19 students. I initially joined the team as a programmer; however, in the middle of the first semester, some interpersonal conflicts arose, leading the producer to leave the project. I didn’t know anyone on the team before joining, but despite that, they offered me the opportunity to take on the producer role. I was successful in facilitating cross-department communication and creating an achievable timeline after reducing the scope of the animation set. Despite numerous challenges, given the ambitious nature of the student project, we ultimately succeeded in creating a finished product of which we were all proud.

What I did on the project:

  • Worked with a sound designer as the team’s audio programmer
  • Created UI system and implemented most UI
  • Implemented json-loaded scenes
  • Created event system based on this
  • Refactored the entire engine to use shared and unique pointers
    • This was done the summer after and made the game way more stable for publishing
  • Created a generalized state machine system
  • Integrated GGPO Multiplayer


Relevant Code Samples

Copyright © 2022 DigiPen (USA) Corporation.

ImGui Wwise Window

One of my jobs on the project was to implement the audio events created by our sound designer. However, there was no easy way to hear those events so I made this ImGui window that would read the header file that Wwise generates and create a list of buttons so each event could be previewed. This greatly helped with audio implementation and debugging.

namespace Editor::WwiseWindow
{
    // Initialize an input file stream for reading Wwise header file
    std::ifstream wwiseIDs;

    // Runs every frame ImGui updates the window. This code is only used in debug mode.
	// Open variable is unused as this code is only run when the window is open
    void Show(bool* open)
    {
        ImGui::Begin("WwiseWindow", open, ImGuiWindowFlags_NoCollapse);

        // Check if the file is open; if not, open the Wwise header file
        if (wwiseIDs.is_open() == false)
        {
            wwiseIDs.open("./Assets/Audio/Banks/Wwise_IDs.h");
        }

        // Check if the file is in a bad state such as if it reached the end of the file, and reset it if needed
        if (wwiseIDs.good() == false)
        {
            wwiseIDs.clear();
            wwiseIDs.seekg(0);
        }

        std::string myline;
        bool inEvents = false;

        // Read the file line by line
        while (wwiseIDs.good())
        {
            std::getline(wwiseIDs, myline);

            if (inEvents)
            {
                // Check if we're inside the EVENTS namespace. 
				// This is since the header file from Wwise contains a bunch of stuff other than events
                if (myline.find("namespace EVENTS") != std::string::npos)
                {
                    inEvents = false;
                    continue;
                }

                // Skip lines containing '{' or '}' as they are not events
                if (myline.find("{") != std::string::npos || myline.find("}") != std::string::npos)
                {
                    continue;
                }

                // Extract the event name
                std::size_t nameStart = myline.find("AkUniqueID") + strlen("AkUniqueID ");
                std::size_t nameEnd = myline.find(" = ");
                std::string name = myline.substr(nameStart, nameEnd - nameStart);

                // Create a button for the event
                if (ImGui::Button(name.c_str(), ImVec2(200, 20)))
                {
                    // Trigger the event using SoundManager
                    SoundManager::GetInstance().TriggerEvent(AK::SoundEngine::GetIDFromString(name.c_str()));
                }
            }
            else
            {
                // Check if we're entering the EVENTS namespace
                if (myline.find("namespace EVENTS") != std::string::npos)
                {
                    inEvents = true;
                    continue;
                }
            }
        }

        ImGui::End();
    }
}
Proudly powered by WordPress | Theme: Outfit Blog by Crimson Themes. Globe Vector and Kiwi Bird Logo Vectors by Vecteezy