
Nexus의 구조
수평적 복잡도
기존의 게임 개발은 고정된 시스템 중심으로 이루어집니다: 각 메카닉은 별도의 코드, 메카닉 간 연결도 별도의 코드입니다. 샌드박스조차 개별 시스템의 집합입니다. 다양성은 늘어나지만 아키텍처는 변하지 않아서 개발 복잡도도 함께 증가합니다.
Nexus는 다른 구조입니다. 게임의 기본 요소는 원자이며, 이 원자로 모든 것이 만들어집니다. 새로운 메카닉을 추가해도 아키텍처의 복잡도는 증가하지 않습니다.
수백만 개의 요소가 있어도 아키텍처는 복잡해지지 않습니다. 시스템은 어떤 수준의 메카닉, 규칙, 세계로든 확장됩니다.
시맨틱 네트워크
Nexus는 데이터를 트리플렛(사실)으로 저장합니다 - "주어 → 서술어 → 목적어" 형식의 단순한 명제입니다. 세계에 대한 사실과 메카닉 규칙이 같은 형식으로 기술됩니다:
- 사과 → 이다 → 먹을 수 있는 것 (세계에 대한 사실)
- 사슴 → 이다 → 초식동물 (세계에 대한 사실)
- 타격 → 피해량 → 6 (메카닉 규칙)
- 독 → 방어구 무시 → 예 (규칙 수정)
- 풀 → 자라다 → 습도가 일정 수준 이상일 때 (세계에 대한 사실)
- 범죄 조직 → 통제하다 → 도시의 구역 (세계에 대한 사실)
데이터와 규칙이 같은 형식, 같은 그래프에 기록됩니다. 트리플렛으로 모든 것을 기술합니다: 오브젝트, 속성, 상태, 관계, 행동, 기술, 마법. 이것이 기존 접근법과의 핵심 차이입니다 - 기존에는 데이터와 로직이 별도로 존재합니다.
세계는 대량의 사실 위에 세워집니다: 동물, 기술, 물건, 건축물, 역사적 사건 - 일반 원칙부터 구체적 디테일까지.
인터프리터
인터프리터는 트리플렛을 처리하고 사실로부터 결론을 도출합니다:
- 사과 → 이다 → 과일
- 인간 → 먹을 수 있다 → 과일
- 결론: 인간은 사과를 먹을 수 있다
결론은 사실의 대조를 통해 구축됩니다. 체인은 길어질 수 있습니다. 좀 더 복잡한 예시:
- 고블린 → 이다 → 생물
- 생물 → 가지다 → 체력
- 결론: 고블린에게는 체력이 있다
- 타격 → 가하다 → 피해
- 피해 → 감소시키다 → 체력
- 결론: 타격은 고블린에게 해를 끼칠 수 있다
피해 서술어를 가진 독을 추가하면, 체력을 가진 모든 존재에게 자동으로 적용됩니다.
인터프리터는 자연어가 아닌 형식화된 쿼리로 작동합니다.
지식 그래프
세계의 오브젝트와 속성은 하드코딩 없이 유연하게 기술되어야 합니다.
기반에는 엔티티가 있습니다: 캐릭터, 물건, 동물, 조직, 배, 식물. 각 엔티티에 서술어를 통해 사실이 연결됩니다.
각 서술어는 하나의 관계 또는 하나의 속성을 표현합니다:
- "이다" (분류: 고블린 → 생물)
- "가지다" (소유: 생물에게는 체력이 있다)
- "피해" (영향: 타격은 6의 피해를 준다)
- "비용" (소비: 타격은 마나 3을 소모한다)
- "흡수" (방어: 방패는 5를 막는다)
- "관계" (연결: 고블린은 인간을 증오한다)
타격은 피해 = 6 서술어를 가집니다. 방패는 흡수 = 5 서술어를 가집니다. 엔진의 추론: 6 - 5 = 1이 체력에 적용됩니다. 어떤 피해원과 어떤 방어수단에든 - 검, 독, 불, 주문 - 하나의 메카닉으로 동작합니다.
속성은 네트워크를 형성하며, 각 노드는 하나의 사실입니다. 규칙과 상호작용은 코드에 고정되지 않고 데이터로서 존재합니다.
성능을 위해 캐싱, 인덱싱, 적응형 디테일 수준(LOD)을 사용합니다.
패턴으로서의 규칙
데이터와 로직만으로는 게임이 아닙니다. 게임플레이에는 규칙 레이어가 필요합니다. 기존 개발에서 규칙은 코드입니다 - 각 메카닉을 프로그래머가 작성합니다. Nexus에서 규칙은 데이터와 같은 트리플렛으로 기술됩니다.
기반에는 모든 장르에 공통된 범용 패턴이 있습니다. 영향: 검은 체력에 피해를 주고, 부식은 내구도에, 인플레이션은 구매력에 피해를 줍니다. 소비: 타격은 마나를, 건설은 목재를, 여행은 연료를 소모합니다. 흡수: 방패는 피해를, 반론은 고발을, 보험은 손실을 막습니다.
디자이너는 어떻게가 아니라 무엇이 일어나는지를 기술합니다. "타격은 6의 피해를 준다" - 트리플렛 하나. 엔진이 스스로 판단합니다: 피해는 흡수를 거쳐 나머지가 체력에 반영됩니다. 각 행동마다 공식을 작성할 필요 없이 패턴에서 도출됩니다.
패턴은 자유롭게 조합됩니다. 카드 게임은 영향과 흡수를, 전략은 소비와 축적을, RPG는 모두를 함께 사용합니다.
새로운 게임이란 새로운 엔티티와 패턴의 새로운 조합입니다.
에이전트
엔티티는 에이전트로 정의될 수 있습니다 - 자체 상태와 행동 규칙을 가진 존재입니다. 이는 선택적 속성입니다. 카드 게임의 적은 스스로 행동을 선택합니다. 전략의 야만족은 조건이 맞으면 공격합니다. RPG의 상인은 도시 사이를 이동합니다. 에이전트는:
- 자신의 지식 범위 내에서 세계를 인식합니다
- 가능한 행동을 평가합니다
- 목표와 세계의 규칙에 기반하여 판단합니다
에이전트도 다른 모든 것과 같은 트리플렛으로 기술됩니다. 대장장이는 단조를 안다(사실), 광석이 필요하다(사실), 광석은 광산에 있다(사실). 이 사실들로부터 인터프리터가 행동을 도출합니다: 광산에 가서 광석을 채굴한다. 광산이 침수되면 - 대장장이가 광석을 구할 수 없고 - 상인을 찾아 - 구매합니다. 행동은 사실의 체인에서 자연히 발생합니다.
논리를 잃지 않는 확장
깊은 시뮬레이션에서 세계에는 동물의 이주, 도시의 성장부터 항성계의 역학까지 방대한 프로세스가 존재할 수 있습니다. 모든 것을 재계산하는 것은 불가능하고 불필요합니다 - 플레이어는 항상 세계를 주관적으로, 제한된 범위에서 인식합니다.
세계는 헥스 기반 맵으로 구성됩니다. 각 헥스는 해당 스케일의 속성을 저장합니다: 행성 수준에서는 기후와 자원, 지역 수준에서는 도시와 도로. 헥스를 클릭하면 다음 레벨이 열리고, 그 안에 더 상세한 속성을 가진 새로운 맵이 나타납니다. 알고리즘은 항성계부터 개별 건물까지 모든 레벨에서 동일합니다.
시간과 공간
장기간에 대해서는 단계별 계산 대신 통계 모델을 사용할 수 있습니다. 모든 순간을 시뮬레이션하지 않고 시간을 이동할 수 있습니다. 예를 들어, 천 년 후 숲이 자라거나 사라질 수 있고, 강이 흐름을 바꾸거나, 정착지가 성장하거나 폐허가 될 수 있습니다. 경향과 연결은 유지됩니다.
공간의 확대·축소가 엔티티와 프로세스의 수준을 결정합니다. 큰 스케일에서는 기후, 이주, 정치. 로컬 스케일에서는 개별 엔티티와 그 속성. 인과 관계의 논리는 모든 레벨에서 동일합니다.
추상화는 마을이든, 행성이든, 은하든 어떤 규모의 세계도 담습니다. 디테일은 의미가 있을 때 나타나고, 나머지는 간소화된 형태로 존재하되 연결은 유지됩니다.
플레이어는 엔티티를 탐색하고 속성을 따라 이동하며 세계의 구조를 깊이 파고들 수 있습니다 - 참고 시스템을 탐색하는 것과 비슷합니다.
세계의 구현
세계는 탐색에 따라 구축됩니다. 플레이어가 아직 방문하지 않은 장소는 데이터와 규칙으로만 존재합니다. 오브젝트는 미리 저장되는 것이 아니라 상호작용 시점에 생성됩니다.
관찰 범위 밖의 이벤트는 전체 시뮬레이션이 아닌 확률로 결정됩니다. 세계는 일관성 있게 보이지만, 디테일은 요청 시 생성됩니다.
장소와 상호작용한 후 그 상태는 저장되어 다시 재계산되지 않습니다.
긴 시간 범위에서는 통계적 경향이 적용됩니다. 시작으로부터 천 년 후 시스템은 확률에 따라 결정합니다: 어떤 종이 생존하는지, 기후가 어떻게 변하는지, 어디에 정착지가 나타나는지.
네트워크 플레이
네트워크 플레이도 같은 원리로 작동합니다. 서버가 데이터, 규칙, 그리고 플레이어들이 이미 발견한 내용을 저장합니다.
여러 플레이어가 같은 영역에 있으면 서버가 공통 상태를 수집하고 동기화합니다.
플레이 영역 밖의 세계는 잠재적 상태로 남습니다 - 규칙과 경향만, 디테일 없이.
기본 네트워크 아키텍처는 이미 작동합니다: 각 플레이어가 독립된 세션을 받고, 다른 사람들이 코드로 참여할 수 있습니다. 행동은 실시간으로 동기화됩니다.
언어로서의 아키텍처
데이터, 규칙, 인터페이스, 에이전트 행동 - 모두 같은 형식입니다. 엔티티는 서로를 알지 못하며, 공통 서술어를 통해 연결이 자동으로 형성됩니다.
실제로 어떻게 작동할까요? 숲은 사실을 가진 엔티티입니다: 목재가 있고, 은신처이며, 가연성이 있다. 도끼는 벌목 서술어를 가집니다. 벌목은 목재에 작용합니다. 불은 가연성에 작용합니다. 가뭄은 가연성을 높입니다. 각 사실은 한 줄입니다. 숲은 도끼를 모르고, 도끼는 숲을 모릅니다. 공통 서술어를 통해 연결이 자동으로 발생합니다. 벌목 서술어를 가진 레이저 절단기를 추가하면 숲에 작동합니다. 불 서술어를 가진 행성 폭격을 추가하면 숲이 불탑니다.
게임 상황을 말로 묘사할 수 있다면 - Nexus에서 작동합니다.
