2026년 3월 5일 · 미하일 바실리예프
Nexus 개발일지: 엔진 프로토타입
한 달 반 전에 사이트에 스튜디오의 계획을 올렸습니다 - Nexus 엔진에 관한 것이었습니다. 그게 무엇이고 그 위에서 어떤 프로젝트를 만들 것인지, 전략 게임이며 이집트 시리즈의 후속작까지요. 거기에 로드맵도 함께 있었습니다. 엔진이 복잡해서, 위험을 줄이려고 저는 그걸 차근차근 쌓아 올리고 싶었습니다. 그런데 댓글에서 플레이어들이 단도직입적으로 말했습니다. 이런 걸 만드는 건 불가능하다고요. 그래서 저는 프로토타입부터 시작하기로 했습니다 - 이런 엔진을 그래도 만들 수 있다는 걸 보여주려고요. 그걸 지금 보여드리겠습니다.

지금 엔진은 이렇게 생겼습니다. 겉보기엔 꽤 단순한 콘솔 프로그램입니다. 하지만 가장 중요한 것을 잘 보여줍니다 - 서로 다른 메커니즘이 하나의 보편 엔진 위에서 돌아간다는 것을요.
지금은 그 위에서 네 가지 시뮬레이션이 돌아갑니다. 첫 번째는 Stone Age, 스튜디오의 가장 첫 게임으로 2013년작입니다. 나머지 셋은 남의 프로젝트를 바탕으로 만든 것입니다. 베끼거나 출시할 생각은 없고, 여기에 둔 건 오로지 전혀 다른 게임 메커니즘이 하나의 엔진 위에서 돌아갈 수 있다는 걸 보여주기 위해서입니다.
Stone Age
Stone Age는 엔진 위에 통째로 재현했습니다. 똑같은 특성, 연도와 턴, 인구, 영토까지요. 일꾼을 숲으로 보내면 식량을 모으고, 인구가 늘고, 기술이 나타납니다 - 그걸 연구해서 건물과 진화 나무를 열어 갑니다. 오스트랄로피테쿠스에서 호모 하빌리스로, 그 너머로요. 이벤트며 결말이며, 원작에 있던 것이 전부 그대로 있습니다.

Slay the Spire
다음은 Slay the Spire, 훌륭한 카드 로그라이크인데 해 보신 분도 분명 계실 겁니다. 엔진에는 전투만 옮겼습니다. 플레이어에게는 카드와 에너지와 체력이 있고, 적에게는 적 나름의 의도가 있습니다. Strike (타격)는 공격하고, Defend (수비)는 방어막을 칩니다. 에너지를 쓰고, 턴을 끝내고, 그렇게 번갈아 가며 누군가 이길 때까지 계속합니다.

GURPS
세 번째 시뮬레이션은 GURPS, 꽤 복잡한 테이블탑 시스템입니다. 거기서 저는 모듈 하나, 항성계 생성기만 가져왔습니다. 재미있는 건 이 모듈 자체가 게임이 아니라 복잡한 생성기라는 점입니다. 그게 별 하나와 수많은 특성으로 이루어진 항성계를 짜냈습니다. 궤도가 열 개 있고, 그 위에 저마다 다른 행성이 있습니다. 첫 번째는 작고 돌투성이인 행성으로 수성을 닮았습니다 - 자기 나름의 질량, 대기압 따위를 갖추고서요. 이 시뮬레이션 하나에 담긴 사실이 모두 합쳐 6천 개가 넘습니다. 좋은 부하 테스트입니다. 엔진이 얼마나 많은 데이터를 감당하는지 보이거든요.

Oregon Trail
네 번째는 Oregon Trail, 1971년의 고전이자 가장 초기의 컴퓨터 게임 중 하나입니다. 마차를 타고 아메리카를 가로지르는 이주민들의 여정입니다. 길을 떠나기 전에 보급품 - 소, 식량, 탄약, 옷 - 을 사들이고, 그다음에는 사냥을 하고, 식량을 배급하고, 일어나는 일들을 헤쳐 나갑니다. 방금은 우리가 습격을 당했네요. 그렇게 여정의 끝까지 갑니다.

네 게임 모두 하나의 엔진 위에서 돌아가고, 어느 하나를 위해서도 코드를 따로 짤 필요가 없었습니다.
실시간 수정
그런데 엔진은 이 게임들을 돌리기만 하는 게 아니라, 코드를 건드리지 않고 진행 중에 바로 바꿀 수 있습니다. Slay the Spire를 예로 들어 보겠습니다.

Strike (타격) 카드의 피해를 바꿔서 100으로 해 보겠습니다:
/set Strike.CalcDamage Value 100그 속성이 그런 카드 두 장 모두에서 한꺼번에 바뀌었습니다. 둘이 같은 클래스를 공유하기 때문입니다.

아예 완전히 새로운 카드 Fireball (화염구)을 추가할 수도 있습니다:
/add Fireball Is DirectDamage
/set Fireball.CostEnergy Value 2
/add Fireball Has CalcDamage
/set Fireball.CalcDamage Value 20
/add Fireball Has ApplyDamage
/add Fireball.ExecutionEffects Has CostEnergy
/add Fireball.ExecutionEffects Has CalcDamage
/add Fireball.ExecutionEffects Has ApplyDamage없던 카드가 이제 게임 안에 있습니다 - 손에 들어와 있고, 낼 수 있고, 피해 20을 입히고, 여느 카드처럼 버린 카드 더미로 갑니다:

규칙 자체도 명령어 하나로 바꿀 수 있습니다. 낸 카드가 버린 카드 더미로 가게 하는 규칙을 없애 보겠습니다.
/remove PlayCard Has MovePlayedCard이제 카드가 손에 남습니다. Defend (수비)를 냈더니 방어막이 붙고 에너지는 쓰였는데, 카드는 그대로 남았습니다.
![규칙을 바꾼 뒤: Defend (수비)를 냈고 - 에너지 0/3, 방어막 5 - 그런데도 낸 카드들이 모두 손에 남아 [X] 표시가 붙어 있습니다](/_next/image?url=%2Fvblog1_slayrule.jpg&w=3840&q=75)
프로그래밍 언어로 짠 보통의 게임이라면 이러려고 코드를 파고들어 프로젝트를 다시 빌드해야 합니다. 여기서는 그럴 필요가 없습니다.
같은 방식으로, 예전에 아예 없던 것도 게임에 넣을 수 있습니다. 예를 들어 골드 - 그걸 만들어 두고 어떻게 쓰이는지 적어 보겠습니다:
/set Player.Gold Value 100
/add CostGold Output Owner.Gold
/add CostGold Math.Subtract.Apply true방금 전까지 없던 특성이 생깁니다 - 골드, 그것도 곧장 100이나요.

그 골드를 바탕으로 새 행동 Bribe (뇌물)도 만들 수 있습니다. 에너지가 아니라 골드를 씁니다:
/add Bribe Is DirectDamage
/set Bribe.CostEnergy Value 0
/set Bribe.CostGold Value 30
/add Bribe Has CalcDamage
/set Bribe.CalcDamage Value 15
/add Bribe Has ApplyDamage
/add Bribe Has CostGold
/add Bribe.ExecutionEffects Has CostGold
/add Bribe.ExecutionEffects Has CalcDamage
/add Bribe.ExecutionEffects Has ApplyDamage
/create Bribe Player.HandBribe (뇌물)는 골드 30이 들고 피해 15를 입힙니다 - 그리고 곧바로 작동합니다.

이게 치트처럼 보이고, 이런 명령어를 입력하는 게 불편해 보일 수도 있습니다. 하지만 치트가 아닙니다. 이건 게임 전체가 기대고 있는 논리적 사실과 데이터 - 게임의 개체, 속성, 메커니즘 - 를 고치는 일입니다. 본질적으로는 게임이 쓰여 있는 언어인 셈입니다.
이 언어를 꼭 배울 필요는 없습니다. AI에게 평범한 문장을 Nexus가 알아듣는 명령어로 바꿔 달라고 하면 됩니다. 예를 들어:
give 999 gold이건 그냥 「골드 999 줘」라는 뜻입니다.

AI가 생각하고, 맞는 명령어를 찾아 실행하면, 골드가 999가 됩니다.
다르게 말해도 됩니다. 「골드 100」도 통합니다. 「나를 신으로 만들어 줘」 하면 AI가 무적을 줍니다. 턴 끝내기, 공격하기, 회복하기 - 이 모두를 말로 할 수 있고, 엔진이 알아듣습니다. 그리고 이 중 어느 것도 미리 스크립트로 짜 둔 게 아니라, 전부 진짜로 작동합니다.
계획
명령어는 더 간단하게 만들고 싶습니다. 지금은 그 Fireball (화염구) 하나를 만드는 데 명령어가 여덟 개쯤 드는데, 서너 개로 줄일 생각입니다. 그리고 다음 영상에서는 좀 더 눈에 보이는 것을 보여드리려고 합니다 - 2D 렌더링이요.
엔진과 계획에 관한 더 자세한 이야기는 Nexus 섹션에 있습니다.
고지: Stone Age는 스튜디오의 게임입니다. Slay the Spire, GURPS, Oregon Trail은 각 권리자에게 속하며 오로지 엔진 시연용으로만 보여드린 것입니다 - 이 빌드들은 어디에도 배포되지 않습니다.
