소식소식

개발 일지

2026년 10월 30일

네 가지 레시피를 위한 주방

TECH글 #9
Kastle Skirmish, 엔진의 예제 게임. 이 주방에서 만들 수 있는 가장 간단한 요리
Kastle Skirmish, 엔진의 예제 게임. 이 주방에서 만들 수 있는 가장 간단한 요리

Kastle Studio에는 러닝머신이 있습니다. 생물이 제자리에서 걷고, 바닥이 세계의 속도로 발밑을 미끄러집니다. 저희는 발을 봅니다. 발이 미끄러져 보이면 보폭이 틀린 것입니다.

3장에서 새 모델이 걷고, 싸우고, 쓰러지게 만드는 것이 일의 절반이라고 했던 것을 기억하시나요? 이제 그것을 게임 네 개에 곱해 보세요. 러닝머신이 생긴 이유는, 어느 시점에 이 일을 돌볼 곳이 한 군데 필요해졌기 때문입니다.

주방은 하나, 레시피는 넷

앞 장은 새 게임마다 같은 것을 다시 쓰는 것으로 끝났습니다. 10월 9일, Line Tower가 태어난 날, Castle Survivors가 가지고 있던 것 중 그 게임의 규칙이 아닌 모든 것이 독립된 패키지로 옮겨졌습니다. 바로 Kastle, 저희 스튜디오의 엔진입니다.

Kastle을 이해하는 가장 쉬운 방법은 주방을 떠올리는 것입니다. 가스레인지, 냄비, 식료품 창고는 모두의 것입니다. 3D 세계, 하늘과 날씨, 생물, 소리, 메뉴, Steam, 저장, 온라인이 여기에 해당합니다. 레시피는 게임마다 따로 있습니다. 규칙, 수치, 문장이 여기에 해당합니다. 게임은 엔진 옆에 있는 폴더 하나이며, 자기만의 시뮬레이션과 콘텐츠를 가집니다.

이 비유에는 일부러 둔 한계가 있습니다. 실제 주방에서는 요리하는 사람이 옆집 레시피를 엿보기도 합니다. 여기서는 엔진이 어떤 게임의 레시피도 알아서는 안 되며, 언젠가 알게 된다면 자동 검사가 실패합니다. 그래서 각 게임의 규칙은 엔진과 나머지 세 게임에서 떨어진 채 게임 안에 머뭅니다.

식료품 창고

1장에서 말한 아티스트들의 작업은 결국 식료품 창고에 모입니다. 각 게임이 쓰던 팩들이 하나의 라이브러리가 되었고, 각 게임은 자신이 실제로 불러오는 것만 함께 출하합니다.

창고 속 개수
생물 모델 164종, 스킨 705개
배경 모델 1,115
효과 235
소리 74
Dota HUD 배치로 본 Castle Survivors, 엔진이 공유하는 네 가지 배치 중 하나
Dota HUD 배치로 본 Castle Survivors, 엔진이 공유하는 네 가지 배치 중 하나

말 하나도 적지 않고는 움직이지 않는다

6장에서 온라인은 편지로 두는 체스와 같았습니다. 두 말판이 계속 같으려면, 아무도 적지 않고 말을 움직이면 안 됩니다. 네 게임이 같은 엔진 위에 올라가면서, 이것은 주방 전체의 규칙이 되었습니다.

Kastle에는 이것을 감시하는 검사기가 있습니다. 결정론 린트는 시뮬레이션 코드를 읽고, 두 컴퓨터를 어긋나게 할 모든 것을 짚어 냅니다. 시드 없는 추첨, 실제 시계 조회, 기계마다 다르게 정렬되는 목록 같은 것입니다. 또한 일부러 나쁜 네트워크에서 대전을 끝까지 돌리는 스트레스 테스트도 있습니다. 지연, 손실, 순서가 뒤바뀐 패킷을 넣습니다. 이미 실제 버그를 하나 찾아냈습니다. 방장보다 늦게 시작된 카운트를 가진 게스트가 대전 초반 턴들을 잃고 있었던 것입니다.

누가 무엇을 쓰는가

모든 게임이 주방 전체를 쓰는 것은 아닙니다. 이것은 지연이 아니라 결정입니다.

게임 Kastle에서 쓰는 것
Line Tower 전부
Custom Hero Survival 전부
Castle Survivors 렌더링만 사용. 시뮬레이션, 네트워크, 메뉴, 저장은 여전히 자체 것
Castle Arena 엔진의 것은 아무것도 쓰지 않지만, Studio와 연결됨

조리대

게임이 하나뿐일 때는 숫자가 코드 안에 있어도 괜찮습니다. 게임이 넷이고 각각 수백 개의 병력, 능력, 무기가 있으면, 값 하나를 고치는 일이 사냥이 됩니다. 어느 파일에 있는지, 누가 쓰는지, 무엇이 바뀌는지 찾아야 하고, 같은 실수가 게임마다 기다리고 있습니다.

Kastle Studio는 이 주방의 조리대입니다. 여기서는 생물 하나하나를 모든 애니메이션과 함께 키 자 옆에서 볼 수 있습니다. 효과마다 자기 무대가 있고, 화면에 비용이 표시됩니다. 그리고 게임별 데이터를 나란히 볼 수 있습니다. 3D 유닛, 진영, 각 전투원이 다른 전투원을 쓰러뜨리는 데 걸리는 시간까지요.

고칠 수도 있습니다. Studio에서 편집한 숫자는 게임의 코드에 있는 정확한 자리로 돌아갑니다. 하지만 돌아가기 전에 가장 중요한 탭인 Consequências를 거칩니다. 변경 전후의 수치를 Studio의 시뮬레이터에서 돌리고, 변경이 건드린 대결이 얼마나 크게 움직였는지에 따라 정렬해 보여 줍니다. 4장의 원칙이 도구가 된 것입니다. 숫자보다 증거가 먼저입니다.

누군가 저장을 누르기 전까지 게임에서는 아무것도 바뀌지 않습니다.

명령줄에서는 같은 시뮬레이터가 관문이 됩니다. 고정된 시드로 모든 대결을 약 25초 안에 돌리고, 어느 하나라도 10포인트 넘게 움직이면 변경을 거부합니다.

아직 레시피에 남은 것

엔진은 아직 쓸 수 있는 모든 곳에 쓰이지는 않습니다. 게임들은 엔진의 명령과 능력 대신 자기 것을 씁니다. Kastle의 것을 채택해야 각 게임의 반복된 코드를 은퇴시킬 수 있으며, 그것이 주방의 다음 단계입니다.

게임 네 개, 엔진 하나, 조리대 하나. 이제 이 모든 것이 지금 어디에 와 있는지 말씀드릴 차례입니다.

— 팀 일동