Implemented the full UI system in Godot using GDScript, including a Balatro-inspired shop allowing players to purchase pinballs and board components.
Prototyped a programmatically-driven animation where the player's current pinballs slide down an adjustable spline path, created by utilizing a teammate's custom command pattern tool.
Engineered a serialized SQLite backend system, enabling designers to easily add new items and balance data without direct engine interaction.
Built a Python 3 tool allowing designers to convert CSV data from Google Sheets into SQLite format, streamlining development of new shop items.
Developed a debug tool for the shop screen, accelerating debugging by allowing designers to preview what items would look like in the shop.
Designed a data-driven item creation system for the shop screen. The system would query the SQLite database for random items of a certain rarity, and convert that data into prefabricated . This proved to be an efficient and very computationally performant way to create new shop items.
Developed a feature for the shop that would display the player's current pinballs and the ones for sale by having them slide down a chute. The UI contains an adjustable Path2D that is converted into motion by a series of actions created through code. Cut from the final project due to a reduction in scope, but this design philosophy proved to be extremely flexible and able to be adjusted quickly by designers.
Collaborated with a teammate who developed a custom Action List system (command pattern–based sequence of actions which can block or delay other actions). Leveraged this tool extensively while working with the UI to creatively to deliver features with smooth animations and dynamic interactions.
Responsible for creation of the SQLite database and its integration in engine using the godot-sqlite wrapper, as well as programming the database reader script for use by the rest of the team. This database underpinned much of the game's functionality and made it trivial for designers to create new items, or tweak existing variables like how many points a pinball is worth or how heavy it is, simply by editing the corresponding table.
Integrated BBCode rich text labels into the database, so that text with BBCode tags could be parsed and displayed correctly when displayed in engine. This change added an incredible amount of readability to the item descriptions, and overall added a lot of flare to the shop.
Learned Python 3 to develop a specialized tool used to convert designer-authored item and pinball data from CSVs into the SQLite database, saving days of manual work and ensuring consistency. Improved usability by turning it into a double-click executable, added support for features like variable type preservation, and documented the workflow for the team.
Developed a shop debug tool that integrated SQL queries with the game’s shop system, allowing designers and programmers to fetch items or pinballs by unique ID from the database and instantly instantiate them in the shop for testing.
Built an in-engine GUI to add pinballs and query data during early SQLite integration; later deprecated during content production, but extremely valuable for debugging item retrieval in the shop.
I'd love the chance to use SQLite more. This was a shorter game project than I'm used to, only lasting about four months, and the team was able to get everything out of the technology that we needed for the basics of this game. I was completely new to SQL going into this project, but simple operations like adding/removing rows or retrieving all data from a column were simple to learn and implement within a week or two. However, in the future I want to try and experiment with some of SQLite's more complex features -- for example, storing each item's texture directly in the database as a BLOB (Binary Large Object), or storing Godot callable functions in the database to alter an items' function without hardcoding it.
During this project, I struggled with balancing my workload and motivation in my senior year of college. I was still able to put in the amount of work required by the team, but I was personally unhappy and would have loved to put more flare into the game's UX. The experience taught me the importance of time management, task prioritization, and maintaining sustainable work habits — lessons I consistently apply to ensure steady contributions and avoid burnout.
Implemented the main menu, options menu, pause menu, scoreboard, and HUD in a back-and-forth collaboration with the UX Designer, balancing juicy UX aesthetics with technical feasibility within sprint constraints.
Built a modular, flexible UI framework in Unreal Engine using Blueprints, streamlining iteration and debugging for all in-game widgets.
Empowered the UI Artist and UI/UX Designer by mentoring them on Unreal Motion Graphics, distributing implementation duties, and accelerating development.
Developed a lightweight CSV parser to efficiently serialize and deserialize saved high scores, powering a scoreboard widget that enhances the competitive high score design pillar of the game.
Integrated Wwise into Unreal Engine alongside the Audio Engineer, crafting a dynamic sound manager to handle music and SFX events with precision.
Designed a stack-based UI controller to manage all interactable game UI. The system provided an easy framework for widgets to communicate with each other as well as other actors in the scene. The architecture proved very useful for the other programmers and designers, and streamlined UI/UX development.
Implemented full support for the options menu (including Video, Audio, Accessibility, and Controls). Built a system for saving and reverting options changes, integrated with a game singleton to adjust Unreal Engine settings based on player preferences.
Programmed several dynamic assets for the in-game HUD, such as score popups, an expanding smart pistol reticle, dash bars, the Slimetime progress bar, and item pickup fanfare. Designed these assets to include adjustable variables and animations, empowering the UX designer to fine-tune visual effects while ensuring clarity in fast-paced gameplay.
Participated in regular meetings with our team of 6 programmers, leading weekly code reviews, discussing progress on the game, and evaluating current goals for the sprint. This brought the tech team closer together, resulting in a better understanding of where the game stood and what tasks needed to be completed week-by-week.
Directed the UI/UX strike team, coordinating tasks between the UX designer and artist to ensure efficient workflow and continuous iteration on all UI elements.
Worked closely with the art and design leads, ensuring that in-progress prototypes of the UI met both aesthetic and functional requirements. I also had the privilege of collaborating with the UR specialist to revise and iterate the in game UI according to eye tracking and playtesting data.
Engineered the backend architecture for the game's scoreboard, which tracks and displays completion times. This system handled writing player names and times to a local CSV file, sorting the top ten results, then reading the data back in to dynamically create UI widgets for each entry.
Developed a custom CSV reader tailored to this project's needs, providing a more flexible alternative to existing Unreal Blueprint CSV plugins. This method proved a very user-friendly and valuable tool for the UI/UX strike team, streamlining scoreboard development and iteration.
Implemented the FMOD core library into the custom engine, utilizing C++ functionality to refactor my old implementation and make the game more performant.
Developed a robust logging and telemetry system to write in game messages to a trace log, significantly streamlining the debugging process.
Built a UI system backend using OpenGL allowing buttons to trigger callbacks and send custom signals upon interaction.
Scripted custom behaviors in Lua managing all in-game UI, such as the main menu, options menu, and HUD.
Designed and edited JSON files to customize the deserialized level states and menu layouts.
Implemented the FreeType software library to render custom fonts and text efficiently, ensuring high-quality, programmatically generated in-game typography.
Developed the main menu gamestate, as well as transitions between play and options states within the game engine's state machine
Created reusable, modular button objects with flexable behaviors for use across the main menu and pause screen.
Implemented the FMOD core library into the custom engine, enabling efficient loading and playing of sound effects, as well as streaming music tracks directly from a file.
Took on sprite art responsibilities for level tiles, stepping up as the primary artist in the absence of a dedicated art team.