The TECH TRACK series sheds light on the developers of projects currently under development by NC. Take a look at the various jobs and the career path that has been built to become an expert.
In this episode, we introduce the server programmer for the new game 〈THRONE AND LIBERTY〉, Byun Sejin.
THRONE AND LIBERTY | A new open-world MMORPG developed by NC. Its three-dimensional world, terrain, and environmental elements provide players with a one-of-a-kind experience.
TRACK 1 | my CAREER
Designing and Realizing Systems Within the Game World
Server Programmers Must Create Lively NPCs
The phrase "like an NPC" has been used as a meme for a while now. NPC stands for "Non-Player Character." It refers to characters in a game that are not playable, and only move in fixed positions and follow predetermined scripts. As a result, the phrase "like an NPC" is often used to describe boring people. I design the server system for NPCs in the Game Server team. I handle the implementation of NPC AI, which determines their movements, actions, combat behavior, etc. Although NPCs may seem mundane, NPCs can be developed in greatly varying levels of details depending on how their input values are set.That's why I try to create NPCs that are not like typical NPCs.
Programmers Dislike Inconvenience
In truth, around 80% of a programmer's work revolves around thinking about how some tasks can be automated. This is because automation is directly linked to improved work efficiency and optimization. Our team also contemplates various things we can automate on the server.
Implementing a PC BOT functionality to enable server operation without a client is one of our most notable tasks. In the past, we needed many people to run multiple clients simultaneously in order to test scenarios involving parties forming for boss raids. We needed a lot of resources to control all those clients. However, we now have an automation BOT that allows us to test with just one client. Furthermore, we created a BOT that can automatically follow and play the tutorial. Thanks to this automation, the Server team's work efficiency was maximized last year. We utilized this to conduct PC load tests and even implement content. It made me very proud when other teams also began using this BOT as it helps save resources.
CAREER PATH | Becoming a "Server Programmer"
My career has practically been a non-stop journey of countless learning. At university, I joined a game development club where we created games using Cocos2d and Unity. We also studied DirectX and delved deeply into the field of game development. During that time, I had opportunities to meet actual game developers, and I think that the admiration I held for those game developers back then might have been the driving force that carried me through my development career. At school, I particularly enjoyed graphics courses, and I even tutored other students.
After joining NC as my first job, I worked in the Game Client team for 3 years before transferring to the Server team. As a new employee, I was immediately assigned to hands-on work, but I also had to study a lot on my own. During the first few months, I read an 800-page book on C++ Programming every day after work. When my job transitioned from client to server development, I continued attending seminars and spent a significant amount of time studying independently. Unlike clients, there are thousands or even tens of thousands of NPCs, so changing even a single variable can have a significant impact on the entire system. Programming with a multi-threaded environment in mind was not easy when I transferred to the Server team. It became necessary to check on performance more frequently and in more varied ways. After so much time in the Server team, I feel that I finally have become accustomed to looking at things from the perspective of a server developer and all that time I spent studying had not been in vain.
TRACK 2 | my PROJECT
Details Determine the Big Picture
Crafting New Gameplay Through Technical Expertise
When I first joined 〈TL〉, the most surprising thing was that each team was pursuing a great amount of detail despite the massive scale of the project. To achieve a Triple-A level of polish for the game, we continuously research and make adjustments. In 〈TL〉, we are attempting many new things that were uncommon in traditional MMORPGs, such as utilizing terrain with significant variations in elevation or engaging in battles on moving objects and rapidly changing landscapes. As we introduce new concepts and gameplay mechanics, we also meticulously add intricate details to bring them to life. I also devote a lot to create natural NPCs with intricate individuality during the process of embodying the NPC AI functionality that I am responsible for, so they all align with the project's principles.
Adding Individuality to NPCs
In the real world, humans and animals all have their own unique gait. If that's the case, shouldn't human NPCs and animal NPCs have different gaits and postures depending on age, gender, or species? Even zombies. We tried to create a sense of individuality by making humans, zombies, and even quadrupeds utilize different movements when roaming around. The challenge was to make animals move in smooth curves, humans in straight lines, and zombies in staggering gait. We created the base roaming behavior using common pathfinding algorithms and then created soft noise to generate different types of movements like curved and straight gaits. We also made it possible to adjust the numerical values using data before we shared this with the planning team. It's so detailed that the players might not even notice it. But when these meticulous details come together, the overall quality of the game is greatly enhanced.
Automated, Yet Natural
During initial development, there were instances where NPCs collided with each other or failed to find natural pathways on foot. Setting the movement paths for every NPC in an open world is practically impossible. That's why it's essential to make NPCs automatically move to their destinations. But in a natural way.
NPCs utilize something called Navigation Mesh1 for their movements. Navigation Mesh doesn't inherently differentiate between dirt paths and sidewalks, so designers need to lay out the graph pathing for NPCs. But in such a case, problems occur when NPCs try to find the starting point of the graph path from where they are standing. Such issues can lead to unnatural behavior, like NPCs walking the long way around or through alleyways even when the destination is right in front of them. That's why it was necessary to expand the area of the starting point of the graph from being just a point to a line so that characters could approach the graph more easily. In this way, we want to automate things so there is less work, but we also need to continuously polish the NPC AI so NPCs can act naturally.
1 Refers to areas within the game world where movement is possible. A NavMesh can be used to find paths from one location to another.
TRACK 3 | my ENVIRONMENT
An Overview of 〈TL〉's Direction
Using a Broader View From Multiple Perspectives
Our team consists of individuals from many different backgrounds, including animation, network, medical technology, electronics, and more. Having individuals with diverse career backgrounds means that we have many opportunities to share a variety of perspectives. Our team actively leverages this aspect when developing ideas and making decisions.
Recently, our team found ourselves needing a new algorithm to replace the old Rule-Based AI. After deciding that we needed a new algorithm, we chose the approach of team members presenting ideas for the final decision. We arranged for an opportunity where each team member could research and present the algorithm they considered to be the best. Thanks to the diverse backgrounds we all came from, we found ourselves presented with many different algorithm options such as FSM, HFSM, GOAP, and more. Each suggestion was reviewed without consideration of the presenter's seniority or experience, and we openly discussed which alternative would be the most efficient. And we ended up deciding on Behavior Tree. Spending time researching and discussing all the different algorithms helped us develop a deeper understanding of the algorithms we use, and it was satisfying to feel that the team was working together toward a common goal.
Establishing a Platform for Collective Exploration
It's common to feel like a part of the organization is wearing you down when you're an employee who only concentrates on the immediate tasks at hand. I think it is essential to look at the bigger picture of the entire project in such situations. For Team 〈TL〉, we hold organization-wide meetings about once every three months, which is more frequent compared to the typical once-a-year practice in other organizations. It is all the more exceptional considering how big of a project 〈TL〉 is. Hundreds of people gather to share the overall direction, current milestones, core system changes, and more. From the perspective of someone working on the project, it's easy to get lost in your own work. But this opportunity where we review the overall situation becomes a meaningful time not only for improving work efficiency but also for increasing motivation and a sense of belonging.
Moreover, we offer a platform where anyone can provide feedback on the game, available not just to specific teams or roles. There are many issues that other teams or roles have been able to identify while looking at your work from a player's perspective – issues that you might have missed as someone working on the project. The platform was very helpful even for the process of implementing NPC AI functionality. I'm feeling first hand how sharing broad and diverse perspectives is vital for both personal and organizational growth.