top of page
Screenshot (1).png

Line 9

Line 9 is an anomaly game made for GMTK Game Jam 2025 under the theme "Loop." Players work quality control in a doll factory, using an X-ray machine, a magnifier, and a UV scanner to spot anomalies in each doll before accepting or rejecting it. I designed and implemented the game's complete menu system, including a procedural main menu that spawns randomized dolls onto the conveyor behind the interface, and integrated Wwise audio middleware into the game's settings. The finished game was released on itch.io at the end of the jam.

Project Details

Type: Game Jam Project

Engine: Unity

Duration: 97 hours

Team Size: 6

Platform: PC

Year: 2025

Key Contributions
  • UI Design & Programming: Designed and implemented the complete menu system in Unity, including the main menu, options, credits, pause menu, and confirmations of destructive action.

  • Procedural Main Menu: Scripted a spawner that drops randomized doll variants onto the factory conveyor behind the menu at set intervals, so the background is populated with a different cast every time the game loads.

  • Audio Collaboration: Worked closely with our audio lead, Derek Knight, who owned the Wwise implementation, collaborating and learning about the middleware during the jam to hook up my menus to his setup.

  • Wwise Integration: Scripted the UI side of the audio system, wiring each options slider to its own Wwise RTPC so players get independent control over master, music, ambience, and SFX levels.

  • Volume Persistence: Tracked slider values in static state so audio settings carry across scene loads.

Clipboard-12x.png
Team: Yarn Ball Thing
logo-16x.png

Our six-person team worked entirely remotely across the four days of the jam. Taylor led design and shared programming duties with Jesse, Kaitlyn and Erin built the pixel art dolls and the factory environment, and Derek composed and designed all of the audio in Wwise. I took the game's menus end to end, from the main menu and options through to the pause screen, which let the rest of the team keep their attention on the inspection gameplay.

Designing the UI: Introducing the Doll Factory

A main menu is usually the first thing a player sees, but it rarely has much to do with the game waiting behind it. For Line 9, I wanted the opposite, so I built the menu directly into the factory floor. Behind the buttons, a spawner drops a randomized doll onto the conveyor every couple of seconds, each one riding the belt across the screen and disappearing into the dark before cleaning itself up.

​

Because the dolls are drawn at random from a set of variants, the cast is different every time the menu loads, and the shift never stops running whether or not anyone presses Play. It sets the tone of the game before a single line of dialogue, and it cost far less than a bespoke animated background would have.

The main menu featuring randomized dolls riding the conveyor behind the buttons

MainMenu_Prototype.png

Early main menu iteration

MainMenuDollManager.png

The doll spawner set up in the Unity editor

Menu Architecture: Pausing on the Line

I carried the same thinking into the rest of the menus. The pause menu instantiates from a prefab the moment the player hits escape and tears itself down on close, so it only exists while it is needed, and it animates in and out instead of snapping on. Visually, I anchored it with caution tape and a clipboard, which I requested from one of our artists, borrowing the factory's own props so pausing feels like stepping back from the line rather than leaving the game.

​

The options menu covers the standards I build into every project, with resolution and fullscreen controls alongside four separate volume sliders. Menus animate in and out through their own animator triggers rather than hard scene swaps, so navigating the front end stays continuous.

Pause menu in action

PauseMenu_Prototype.png

In-engine pause menu mockup

Learning Wwise: New Middleware

Every audio system I had built before this ran on Unity's built-in mixer. Derek, our audio lead, was working in Wwise and owned the game's audio implementation, which meant the volume sliders in my options menu had nothing to talk to until I learned how Wwise exposes its parameters. He walked me through how his setup was organized and what he had already routed, and from there I could meet him halfway.

​

Wwise handles runtime audio values through RTPCs, or Real-Time Parameter Controls, which serve roughly the same purpose as exposed parameters on a Unity mixer. Derek defined the ones the game needed, and I wired each slider to its own RTPC, giving players independent controls over master, music, ambience, and SFX levels.​

SliderFunctions.png

Each options slider drives its own Wwise RTPC

Getting the sliders talking to Wwise was only half of it. Volumes reset the moment the player booted the game, so Derek and I  traced it together and I ended up holding the current values in static state, which keeps a player's settings intact across scene loads.

Volume settings in action

Picking up a new tool is one of my favorite parts of any project. A lot of my work has started exactly here, whether that was learning a custom 2D C++ engine on KnightLight or a proprietary 3D editor on NiteLite, and getting my hands on middleware this widely used was something I was glad to say yes to. Four days was not much time with it, and I came out of the jam wanting more.

Post-Mortem: Knowing What You Can Give

Line 9 was the first jam I entered while holding down a full-time job, and that changed what the four days were actually about:

​

  • Setting Expectations Early: I was working full time at WANIC through the jam, so before anything got assigned, I told the team, and Taylor as design lead specifically, exactly how much time I had. We scoped my contribution to all of the game's menu content, which was something I could own completely and deliver on schedule without becoming a blocker. Being honest up front turned a limitation into a clean division of labor, and I would much rather name a constraint on day one than quietly miss things on day four.

Main menu iterations made during work downtimes

  • Meeting a Tool Under Pressure: Wwise was the first audio middleware I had touched outside Unity's own mixer, and I learned it while the clock was running. RTPCs turned out to map closely to the exposed mixer parameters I already understood, so the fundamentals carried over more than I expected them to.

WwiseProject.png

Wwise project

  • Knowing When Not to Refactor: Each of my four volume sliders runs the same three lines with a different value, which is the same repetition I called out in my KnightLight post-mortem and said I would solve with helper functions. I spotted it here while writing it and shipped it as is. With four days and one options menu, a parameterized helper would have saved me nothing, and the duplication stays easy to read and easy to collapse later. Recognizing a pattern is one skill, and judging when it is worth applying is another.

HelperFunction.png

Example helper function

  • In-World UI: Building the menus into the factory, from the conveyor running behind the main menu to the pause menu screen anchored by caution tape, is the same instinct I keep returning to on other projects, like the results screen in Project Nasu and the start sequence in KnightLight. Line 9 confirmed for me that this is the kind of UI work I want to keep doing.

Play The Game!

Line 9 is free to download on its itch.io page, and the whole game plays with just the mouse. If you give it a try, see how many anomalies you can catch before the shift ends, and feel free to reach out if you want to talk about the project.

bottom of page