is an action-platforming indie game inspired by Zero’s gameplay from Mega Man X that my talented team and I are currently developing. Development is reaching the end of the prototyping stage, thanks to our hard work. Scroll down to learn more about my contributions, or see it on GitHub.

Project Jump ’n’ Slash

Credits

Henry Holman - Director, Game Engine Programmer, Gameplay Programmer, Tools Developer

Joseph Turzitti - Game Designer, Narrative Designer

Len Jensen - Tools Developer

Katie Holman - Gameplay Programmer

Ruben Rojas - Narrative Designer, Game Designer

My Roles

  • As director, I am responsible for making sure we are always making progress in some way. I schedule weekly meetings with members of the team to assess their progress on development tasks, and determine how to proceed, factoring in team feedback. Using a shared Trello board, development tasks can be tracked and updated as they go from discussion, to task, to completed work.

  • Currently, I am the sole engine programmer on the project, and use C++ to write the engine code, which utilizes SFML. I not only write the engine code the gameplay programmers must interface with, but I also write the documentation so they know how to use the engine effectively. Every design decision for the engine comes from considering the following criteria:

    • Speed/efficiency and decoupling of the code

    • Ease of use and flexibility for the gameplay programmers, and…

    • Whether some system of functionality should be an engine feature or part of the gameplay code.

  • As one of two gameplay programmers, it is important to write code that is well-commented so my teammate can understand what the code is doing with relative ease. We also keep each other accountable to maintaining good coding practices and meaningful variable names. I am very proud of the work we have done together so far. My favorite part about working on a team of programmers is that everyone is constantly learning from each other, whether by reading each other’s code or having a discussion about how to design or implement some algorithm.

  • As a game programmer, I have made it a habit to assess how efficient processes are (and can be). Embodying this kind of thinking as a game director naturally led me to applying my programming skills to tools development. Creating tools not only makes my own life easier as a programmer, it also makes fewer headaches for everyone on the team, removing barriers to us doing our best work. While our other tools developer mainly works on writing GUI-based tools for our non-programmers, I mostly create tools (or systems of them) to assist the gameplay programmers.

My Contributions…

…as Director

My biggest contributions involve providing task management systems for my team and fostering communication and collaboration between teammates. I also leverage my communication skills to facilitate interdisciplinary collaboration. I try to anticipate the needs of my team members to ensure development continues to progress smoothly, and determine when it is time to bring new people onto the team.

…as Game Engine Programmer

I am currently the only engine programmer on the team. If the game designers want to have something added to the game that requires an engine feature, I am able to continuously adjust the feature set of the engine to accommodate their vision. For example, our initial prototype was modeled after classic Mega Man games, where the player walks between rooms which either have a static camera or one with limited scrolling, focusing on a single room at a time. Achieving this very specific kind of camera focusing and movement required designing the in-engine Camera class with more member variables and functions than I normally would, such as being able to adjust the dimensions of what the camera can see to fit both a standard in-game room size and window aspect ratio.

In this role, I am also utilizing my communication skills when writing documentation and tutorials on how to use our engine. I do this by putting myself in the shoes of someone who doesn’t understand or care how the engine works, and assessing the needs of the gameplay programmers in a vacuum.

…as Gameplay Programmer

While I have written a large portion of the foundational gameplay code thus far, I also help our other gameplay programmers get acquainted with C++ and teaching them how to write optimized code. In this regard, my biggest contribution is helping them seamlessly transition from casual programmer to gameplay programmer, and get acquainted with our code base. My contributions to gameplay code going forward will be decreasingly coding-oriented and increasingly design-oriented as the other gameplay programmers get more familiar and well-acquainted with the code.

…as Tools Developer

My most recent and proudest contribution in this regard has been automation.

Early on in development, shortly after our first tools developer joined the team, I realized we needed a “common language” between the GUI level editor being developed and the game code. I wrote a Python script to automatically generate a JSON file which contains information on how the level editor should encode level data, and information on how the game code should decode said level data. Having this tool early on in development meant less headaches for the game designers when trying to design levels and have them show up properly in the game.

I also recently wrote a Python script which automates asset loading in the game. Any time an artist adds any sort of sprite, they simply have to run the Python script and a text file will be created for the engine, telling it which assets to load and how to load them. For example, it is more efficient when rendering to have multiple sprites derived from one single texture, but it is easier for the artists to edit each sprite in isolation. My script will read all of the individual sprites for the player character, combine them into a single spritesheet automatically and without overlap. It then encodes instructions into a text file on how to load that spritesheet as a texture, and how to load each of the sprites individually from that texture.

Next
Next

Relentless Game Engine (C++)