Spellbreak
Spellbreak is a multiplayer action-spellcasting game where you unleash your inner battlemage. Master elemental magic to fit your playstyle and cast powerful spell combinations to dominate other players across the Hollow Lands.
In-Game & Real Money Stores
First user-facing version of the in-game / cosmetic store front
Worked full stack with team to implement virtual currency and real-money transaction systems
Developed a tech design doc (TDD) with team outlining the feature stack, everything from low-level systems, backend data management, and frontend presentation and UX
Wrote online subsystem integration in Unreal Engine for Epic Online Store (EOS)
Wrote backend system for handling cosmetic store offer schedule and serving it to clients
Collaborated closely with UI/UX developers to bring the in-game cosmetic store and real-money transactions menu to life (and iterating further on them after MVP)
Served as Primary Subject Matter Expert for the feature stack for the lifetime of the game
Dealt with numerous and ongoing platform specific concerns around certification and purchasing using real money. This involved dealing with platform specific restrictions & API differences for each platform the game was published to (Sony/PS4, Nintendo/Switch, Xbox, Epic, and later Steam).
Worked with art team after MVP to add animations to each outfit when previewing the cosmetics. Audio was also later iterated upon (not in video above) to make sure that SFX we added to animations or emotes would appear in the preview.
Managed the real-money transaction offers as new offers got released (separate from cosmetic offers)
Wrote thorough documentation on managing real money transactions and onboarded teammates onto the system
Designed the tech behind the cosmetic bundles feature and implemented full stack, updating documentation and onboarding as necessary
Cosmetic store front after it was iterated upon following release.
UX of purchasing cosmetic bundles
Please see Justine Raymond's portfolio for UI/UX side of designing the store menu experience.
Cosmetics Menu Rehaul & Cosmetic Loadouts
Iteration 1; around game launch time
Iteration 2; including the cosmetic loadouts feature
Collaborated closely with UI/UX developers to rehaul the cosmetic collections menu and system
Drafted and iterated upon a Tech Design Doc detailing the implementation of the per-class cosmetic loadouts system
Implemented the full stack for the per-class cosmetic loadouts feature (backend data management, intermediate server api, front-end UI/UX menus)
Iterated with designers and artists to fine tune the experience of the cosmetics menus
Integrated new cosmetic flow with existing class selection user experience
Chapters
Implemented chapter narrative exposition in close collaboration with teammates
Designed backend tech for handling what narratives are presented and when
Later integrated voice over audio into the narrative exposition experience
Integrated chapter / battle pass flow with existing store system
Iterated on quest menu rehaul after chapters were released
Explore additional tech solutions to be explored if we wanted a more dynamic and interactive exposition experience
Dominion HUD & Menus
As we prepared to release Chapter 2, I worked with my team to develop the new Dominion game mode. The mode required a broad range of features and disciplines, so it was highly cross-collaborative. I worked primarily on a handful of the HUD and Menu elements for communicating to players the state of the match and what upgrades they had available.
Worked closely with UI/UX on the gameplay team
Iterated on the HUD user experience (team score bars, boon availability/recharge, zone UI)
Significant work in shaders to optimize both the experience and performance of HUD elements
Designed reusable widgets and shaders that were flexible to UI needs
Implemented boon selection store and voice over cues
Boon Selection
The boon selection screen was one of my favorite features that I worked on in this milestone. We reused a handful of elements from already released content (mostly widgets on the right hand sidebar) but a lot of the core content had to be built from the ground up to be custom tailored to the needs of the feature. There was a notable about of collaboration between the UI artist leading the charge, the audio folks putting together the spectacular sounds and VO, and myself (doing most of the engine hook up, pixel pushing, and code to string it all together).
Score-Bar Header
The score bar which persists throughout the match was a particular challenge. While the layout was straight forward, the progress bars indicating each teams progress towards the desired number of points is deceptively complicated. We wanted the progress bar to communicate a lot to the players while still looking nice, animating the progress when points were added, but still making sure player knew exactly where their team's points stood. The UI artist also wanted it to be a 3-color logarithmic gradient, which was a challenge to put together in Unreal's material shaders. All in all, the material was quite performant, communicated everything we needed it to, and was easy to reuse for other features (like the zone capture progress).
Zone Capture Progress
While a player is within a given distance from a zone, they are presented with a UI element above their abilities. This element presents the capture information about the zone (what team has control, how much progress is left until your team captures it, what the textual state of the zone is). The progress bar was easy to slot in after work in the score-bar header and this item came together pretty smoothly, thankfully.
Unfortunately, the iterations on the Vital Gem where anything but smooth. The vital gem is what communicates to the player that they have charges/points they can spend towards upgrades (moving faster, extra durability, new gauntlets/weapons, other abilities, etc). There were many prototypes we tried out and some got really closed to being the final product, but in the end we had to scrap some of the more... visually compelling... options for a more readable and easier to engineer vertical fill. We added some animations for polish (see the video) and by the time we were finished our internal playtests were reporting that the juice on this element felt great!
Custom Matches
Designed and implemented the full stack for setting up custom matches
Worked closely with design and art to ensure final results matched expectations
Wrote and iterated on Tech Design Doc prior to feature implementation
Implemented and documented everything from backend data management, interfacing with matchmaking, main menu UIs, and in-match impacts/applying customizations
Class & Talent Selection
Prior to launch (and all of the features above) my first work on the project was rehauling our class selection screen in close collaboration with UI/UX. This early pass set us up for success as we later fine tuned our styling and implementation best practices. The Talent Selection menu in particular was one of the first menus to set the bar for the style and experience of all the new and redesigned menus which follows.
Other Behind-The-Scenes Work
Wrote tool that I used to ease the complications of building the game and running in a Play-In-Separate-Editor-Process (PISEP). Integrated with Python and the Bash Shell to run scripts, some scripts which handled the build process (and could be run in parallel) and others which integrated with our data pipeline for importing data into the game.
Made a standalone multi-process shell management tool to handle the various scripts and command line operations that we used to while developing. This tool displayed the console output of various processes and was able to run one-off scripts to handle data management. It was written in python and leveraged ImGui + Bimpy to display UI. A later MVP iteration was written in Rust.
Worked with a senior eng on rehauling how we handled game modes. Allowed us to more flexibly enable or disable given modes for given regions, and provided us the framework to easily add more modes without changing fixed enums everywhere.
Lead the charge on localization and trying to keep our loc files clean of any temporary text, and easy to read for localizers (trying to change any of the default gibberish into actual keys). Was frequently consulted whenever we had questions from the external loc folks. Wrote scripts to aid in the management of localization and advocated for an automated localization management process integrated with our existing CI.