Team Size: 26
Development Time: 5 Months
Engine: Unreal 5
Role: UI/Settings Programmer
Team Size: 26
Development Time: 5 Months
Engine: Unreal 5
Role: UI/Settings Programmer
Description
Ling and the Corrupted Hollow is a 3D puzzle platformer with Asian inspired locales and atmosphere. The game has you follow Ling as she explores various locations from her past using the power of spirits to help her through.
Role and Responsibilities
I was primarily responsible for implementing all of the user interface elements in the game as well as systems like save files and settings menus.
Created all menu flows in the game using Unreal Engine's built-in widget system and the Common UI plugin.
Created backend code for applying various audio and graphics settings as well as supporting dynamic text for localization.
Worked with artists to bring their UI designs to life while maintaining all proper functionality required by producers and designers.
Worked with other programmers to hook UI widgets into core game mechanics for conveyance. Also ensured save files were structured to store all necessary player data for the save system.
Art and Widgets
Learned Unreal's widget blueprint systems and many tools with the Common UI plugin
Worked with artists to integrate visuals and art into the menus, doing my best to match their vision without compromising functionality
Wrote Unreal C++ libraries for blueprint use in several menu functions that were needed and specially made for our game
Settings Insights
Learned Unreal's Game Settings systems and how to manage them through UI elements. These included settings like resolution, fullscreen mode, and FPS.
Created custom settings pipelines for saving, localization and audio settings which used Unreal Engine's native functions but expanded on them for uses tailored to our team's needs.
Localization Example: Menu textures had text baked into the textures itself meaning the text localization in Unreal's string tables wouldn't apply to them. Instead I created functions that would report the game's current localization and culture to a global game state and had the widgets adapt their texture depending on that culture value.
Game Saves: Unreal's Save Game system was the base for our permanent data system including save files and setting preferences. All game elements and UI elements that use saved data are powered by this backend system.
Post-Mortem
Lessons in Motivation and Development:
This game had a turbulent development cycle, to say the least. Many of the cut features and shifts in core gameplay trace back to the team's vision not solidifying early enough to lock down a clear identity for the game.
Working through a difficult atmosphere and dipping team morale was one of the biggest professional lessons I took from this project. When the team lost roughly half its manpower after Alpha, a smaller group of us — across disciplines — chose to stay and push the project forward. That meant stepping outside our usual roles, adapting quickly to the team's shifting needs, and making hard calls on what to cut or optimize to get a shippable product out the door.
While I and the others share some sentiment of regret for what this game could have been, I am proud that we managed to push a shippable title against the odds. The work I produced under those conditions taught me something I carry into every project since: I can stay driven and keep a constructive attitude even when things get genuinely hard. That's given me a lot of confidence going into future work.
Even Better If's:
Practically one of the biggest lessons I took away was the value of documentation and teaching across disciplines. For example, a lot of pains in the development of the UI stemmed from my inability to explain the Unreal Widget system well enough to our art team leading to lots of miscommunication in what the final art assets had to be in order to achieve their desired outcomes. In hindsight this stemmed from a lack of a clear unified vision across the disciplines, and my inability to effectively teach the necessary details of Common UI which helped the artists work autonomously later in a more efficient manner.
I also think the project's early struggles point to a broader lesson about team alignment during ideation. While our team came together to deliver a shippable title near the end, there were earlier moments where many of us could've been more vocal and engaged in shaping design decisions instead of staying passive out of fear of contradicting others' ideas. That's something I've since made a point to actively work on: speaking up earlier, even when I'm not sure my input will move the needle and trusting team mates to critique and collaborate in good faith.