Crafting the Codec
“Hey. Just so we’re clear—if you use leverage, I’m seriously going to kill you.”
“I’m going to use it though?”
“I’m warning you. Pull high leverage and I’ll actually kill you. I’ll go find your parents and tell Yihyun hyung too.”
“That’s a bit…”
“Swear you won’t go over two times.”
“Three times should be fine, right?”
“Are you insane?”
This is why non-regressors are such a pain.
I already knew Black Monday was coming in the summer, but under Seung-wook’s fierce glare I gave up on high leverage and made the promise.
“I’ll only do three times.”
“Haa… I really want to tell you not to even dream about leverage. This isn’t exactly reading scripture to a cow, you know.”
“After you’re discharged, keep checking. I think the market will wobble around summer.”
“Are you a shaman or something?”
“Probably July, August, or September?”
“Bullshit. I’ll keep watching, so make sure you pick up when I call.”
After Seung-wook’s discharge, the studio became a corporation.
“Hey, Yihan. Even though we switched to a corporation, my stake in Dot Hero is still safe, right?”
“You kept the contract, didn’t you?”
“Of course!”
“Too bad. If you’d lost it without getting it notarized, I could’ve swallowed it all myself.”
“Are you serious?”
“Just kidding. If you’re worried, want to get it notarized now?”
“Forget it. I trust you, but if you don’t pay up I’ll just sue you in court.”
Typical guy from the land of lawsuits.
Now that PlayForge Studio had become a corporation, the biggest change was that settlements for Daniel never seemed to end.
I could no longer freely dip into Dot Hero’s revenue that now belonged to the studio.
“Director! I bought the supplies! Here’s the receipt.”
“Good work. By the way… you should give me the corporate card too.”
“Ah! Here it is!”
Before, forgetting a receipt wasn’t a big deal, but now that we were a corporation every expense had to be recorded meticulously.
‘Ugh. This is annoying.’
Despite the accountant’s advice to hire a bookkeeper, I didn’t bring on extra staff. For now I planned to use the one-stop service from the accounting firm. It cost more, but apparently even that could be treated as an expense.
I didn’t intend to keep paying for the service forever. There was someone I planned to hand the bookkeeping to later.
‘Once Seung-wook finishes his service, I’ll make him do it.’
Part of me wanted to hand him all the money and let him invest it, but that was the Seung-wook from before the regression. Handing full authority to someone who hadn’t even graduated yet felt… premature.
If I gave him tasks one by one, his potential might show. I believed he’d do well, but experience couldn’t be ignored.
Honestly, the odds were higher that Seung-wook would refuse. With his safety-first personality, he’d probably just want to return to school.
‘Then I’ll have no choice but to hire someone.’
I’d already braced myself for it. Running a company meant dealing with administration, taxes, and financial management—all of which took a lot of time. So far the company had been small enough that payroll and utility bills were manageable, but as we grew, things would only get more complicated. I’d have to bring someone in eventually.
‘I barely have enough time to develop as it is.’
The more time I, the director, spent on anything besides game development, the later our release would be.
Some things had changed after we became a corporation, but one thing remained exactly the same.
Game development.
“Director. The background modeling for Dot Hero Stage 13 is finished. Can you check it?”
“Ah, just a moment… Looks good. Confirm that one as-is. Seong-bae-ssi? How are the mobs and boss for Stage 13 coming along?”
“Almost done!”
Preparing updates for Dot Hero while developing the next game continued as usual. Over eighty percent of our work was on the next title, but we still squeezed in time for Dot Hero whenever we could.
I watched the staff’s busy hands for a moment before focusing on my own work.
“Jaemin-ssi. Looks like we won’t be able to use a commercial codec after all. Let’s scrap the prototype we made.”
“Sc-scrapped?”
“Our computers have good specs so it runs fine, but if we think about the average user’s hardware, it’s way too heavy. We’re making a game, not a bomb that’ll blow up people’s PCs, right?”
“Th-that’s true. Then what do you plan to do about the codec?”
“We’ll have to make a new one.”
A codec was essentially a packaging tool.
Sending raw audio would overload the internet, so you compressed and encrypted (encoded) it for transmission. Once it reached its destination, you decompressed (decoded) it so the listener could hear it as sound again.
It sounded complicated, but it was easier to think of it like shipping. If you ordered a chair, sending the finished product would cause problems during transport, so you’d disassemble it into parts, pack it in a box, and ship it. In this case, the codec’s job was to also reassemble everything once it arrived.
The reason I wanted to build our own codec was simple: every publicly available codec in the industry had terrible packaging. How could I tolerate delivery accidents on top of that?
‘If I were only using it as an in-game module I’d just deal with it, but if we want to use it as an external voice chat program too, what’s out there right now isn’t enough.’
They said if you didn’t like the temple, the monk should leave.
I didn’t like the temple, so I wasn’t just leaving—I was planning to build a new one.
‘I’ve done this before anyway.’
Back during Dot Hero I hadn’t liked the engine, so I built a custom one. I planned to do the same with the codec.
I reviewed the major open-source codecs.
‘Use this one, discard that one.’
When choosing open-source code, you had to check the licenses carefully.
‘Mixing in GPL-family code would be disastrous.’
GPL-family licenses were like landmines.
Some people said you could use their code however you wanted, but the catch with GPL was that if you used their code for free, you had to release your own program’s code for free too.
‘Even one line mixed in and you’d have to open everything.’
I’d benefited plenty from open-source code written by other programmers, so I planned to release my own work someday—but doing it voluntarily felt very different from being forced.
‘At this point I’ve gathered plenty of ingredients.’
Now that I had the materials for the codec, it was time to process them.
The most important part of codec development was audio compression. I wrote an encoding algorithm for it. It was mathematically complex, but thanks to generous programmer seniors who’d released their work as open source, I only had to improve what already existed.
Next came reducing latency.
Good encoding meant shorter transmission time, but if decoding took too long, it was all for nothing.
“Director, may I ask what you’ve been working on lately?”
“What I’m working on now?”
“Yes! You’ve been concentrating alone a lot recently, so I was a little curious… Is it a secret?”
While eating lunch at a nearby kimchi jjigae place with the staff, Cha Ju-hee asked what I’d been up to. She’d apparently been wondering why I’d been throwing design documents at everyone and coding by myself.
“No, why would it be a secret? The programming team already knows everything. I just didn’t mention it to the art team because I figured it’d give you a headache if you don’t know coding.”
“That’s disappointing. We’re on the same team. I should at least know what the director is doing.”
“Hmm. You think so?”
The past had changed, but before the regression I’d switched to being a programmer, so I figured she might understand. I told her what I was working on.
“I’m making an audio codec. The encoding algorithm is done and I’m working on the decoding algorithm now.”
“Decoding?”
“Yes. The reason existing codecs have latency spikes is because the receiving end uses floating-point operations for inverse quantization and eats up too much CPU. I’m switching everything to integer fixed-point operations, cutting the overhead from error correction, and bringing decoding time down below 20ms. If I hardcode it in assembly—”
“W-wait! I don’t understand any of that!”
Programmer Cha Ju-hee would’ve gotten it instantly.
I tried a simpler analogy for a non-programmer.
“Sometimes when you order something fragile, they wrap it in bubble wrap like crazy or stuff it with styrofoam so nothing breaks, right?”
“Right?”
“The contents are safe, but isn’t it annoying to unpack? It takes forever to open.”
“Yeah. When it’s wrapped too tightly it’s a real headache.”
“Decoding is exactly the same. What I’m doing is making that package easy and fast to open.”
“Aha!”
It was more complicated than that, but for a non-expert, this level was enough.
After lunch I returned and focused on codec development again.
I’d solved the slow decoding problem. Next was making sure the codec would still transmit properly even on the sluggish networks of this era.
When the connection was good, it should send high-quality audio. When ping spiked or bandwidth ran low, it needed to drastically reduce data size to prevent call drops.
Also, in case packets were completely lost, I needed to hide hints in previous data or fake the missing waveform so the result didn’t sound robotic.
‘Last is noise separation.’
If packaging (encoding), delivery (transmission), and unpacking (decoding) were the core, the final step was detail work. I had to separate human voices from background noise.
No matter how well you compressed something, there was a limit to how much you could shrink bulky items. If the goal was transmitting a voice, background noise was just wasted resources.
I built a kind of noise gate so ambient sound wouldn’t leak through the mic.
“Done.”
“Th-the codec is finished?”
“Yes. There are still some parts I’m not satisfied with, but they can’t be fixed right now. Once we make a lot of money, I’ll improve them.”
“Th-that’s amazing. Finishing a codec in just one month… Even if you mixed and improved open-source code, this doesn’t make sense… The performance too…”
“You could do it too, Jaemin-ssi.”
Seeing Jaemin’s reaction, Seokho asked,
“Is it really that impressive?”
“O-of course. Existing latency is almost 150ms, but the director’s codec averages 20ms. It’s a r-revolution in audio codecs. And he basically developed it alone… Even taking a month is something that should be impossible…”
“As expected of the director! Amazing!”
“Th-this isn’t the level where you just say ‘amazing.’ This is something that shouldn’t be possible…”
Hardware wasn’t the only thing that advanced over time.
Code did too.
I couldn’t say that out loud, so I just brushed it off.
“It’s nothing. You could do it too, Jaemin-ssi. Of course, Seokho-ssi could also… do it after ten more years of study.”
“I see! I’ll keep working hard!”
The codec was complete, but there was still a long way to go.
I added a variable jitter buffer so data would arrive in neat order.
It wasn’t necessary for an external program, but for in-game use the sound needed to change depending on position, so I coded 3D spatial audio integration.
I also made sure the system could properly recognize hardware devices.
That was how the voice chat system prototype was finished.
If I combined it with the management bureau prototype Jaemin and Seokho had been working on…
“Aah. Can you hear me?”
“Y-yes, I can hear you. No packet loss and latency under 20ms.”
“What about the game? It didn’t crash, right?”
“No. B-basic controls work fine and the p-physics engine has no issues either.”
The true management bureau prototype was complete.
*
Finishing a prototype was good news.
But a prototype was still just a prototype. Real development was only beginning.
For a while I’d given the staff some breathing room while I focused on voice chat. Now I dumped work on them again.
“Minji-ssi, start modeling the smiling clown, No. 51. Seong-bae-ssi, please model the blue moon, No. 130, and the otherworld speaker, No. 41.”
“Understood.”
“Um… Could I handle the creature-type anomalies instead of the object-type ones?”
“You want to? Minji-ssi, is that okay?”
“Yes.”
“Then do that.”
“Thank you!”
I adjusted the graphic designers’ workload. They’d been focused on creating anomalies for a while, so I shifted more of their time toward modeling.
“Juhee-ssi, you’ll need to draw detailed concept art so Seong-bae-ssi and Minji-ssi can model more easily.”
“I-it doesn’t have to be high quality, right? If you’re going to make me draw at the same level as the Dot Hero illustrations, you might as well fire me!”
“Whoa, whoa. Calm down. Just enough that we can recognize what it is.”
“Huuu…”
Cha Ju-hee let out a relieved breath, but it was a trick. Lower quality meant she’d have to draw a lot more volume, so the workload would end up about the same.
“Seokho-ssi, from now on your job is to apply the 3D models the art team creates into the game.”
“Yes! Just leave it to me!”
“Jaemin-ssi, please focus on the functional parts. Object-to-object interactions, object-to-map interactions, things like that.”
“U-understood.”
Finally, I gave instructions to Daniel, our one-man sound team.
“Is the BGM for Isolation Site 1 finished?”
“Yes. Just like you said—dark cave atmosphere.”
“Good. Site 1 is done then… Site 4 is an underwater isolation facility, so we need to capture that deep-sea feeling. What kind of vibe are you thinking?”
“Deep sea means strong pressure, right? Ears feel stuffy and uncomfortable. I was thinking of going for that kind of vibe. Sound good?”
“Perfect. You’re doing great.”
Daniel handled things well on his own, so he required the least supervision.
After giving out assignments, I sat down at my own desk.
Was I just slacking off while making everyone else work?
‘Of course not.’
If anything, I had the most work.
Reviewing and approving everything from the programming team, art team, and sound team—that was my job. On top of that I was coding myself, so I barely even had time to go to the bathroom.
Still, it didn’t feel exhausting.
Because it was work I loved doing.
“Alright! Everyone, let’s focus and get to work!”
Full-scale development of the next game had begun.