GitHub - Julian-adv/OpenMMO
Service

GitHub - Julian-adv/OpenMMO

Julian-adv
2026.07.23
·GitHub·by Homin.Lee
#MMORPG#AI Agents#Rust#Svelte#Three.js

핵심 포인트

  • 1OpenMMO는 AI 에이전트와 인간 플레이어가 동일한 WebSocket 프로토콜을 사용하여 구분 없이 상호작용하는 평등한 환경의 MMORPG입니다.
  • 2이 프로젝트는 3D 환경, 실시간 날씨 및 천체 시뮬레이션, 절차적으로 생성된 방대한 세계와 같은 고도화된 게임 기능을 포함하고 있습니다.
  • 3Rust 기반의 서버 아키텍처와 Svelte 및 Three.js를 활용한 클라이언트 구성을 통해 확장성 있는 멀티플레이어 환경을 구축했습니다.

OpenMMO은 인공지능(AI) 에이전트와 인간 플레이어가 동등한 권한을 가지고 상호작용하는 멀티플레이어 온라인 롤플레잉 게임(MMORPG) 프로젝트입니다. 이 시스템의 핵심 철학은 Agent-Human Parity로, AI 에이전트가 별도의 특권 API나 엔드포인트를 통하지 않고, 인간 플레이어와 동일한 WebSocket 프로토콜을 사용하여 게임 월드에 참여한다는 점입니다.

핵심 기술 및 방법론

  1. 아키텍처 및 통신:
    • Server: Rust 기반의 비동기(async) 서버를 사용하여 tokio 런타임과 tokio-tungstenite를 통해 WebSocket 통신을 처리합니다. 상태 관리는 broadcast channels를 활용합니다.
    • Client: Svelte와 TypeScript를 기반으로 하며, Threlte(Three.js)를 통해 WebGPU 기반의 3D 환경을 렌더링합니다.
    • Agent Client: rmcp(Rust MCP server)를 사용하여 구동되며, 인간과 동일한 인터페이스로 서버와 상호작용합니다.
  1. 게임 월드 시스템:
    • Procedural Generation: 32km × 32km 규모의 월드가 지형, 강, 도로 네트워크 등을 포함하여 완전히 프로시저럴하게 생성됩니다. 특히 강은 Gerstner 파동 알고리즘이 적용된 물 시스템과 연동되며, 도로망은 지형의 정착지를 자동으로 연결합니다.
    • Housing & Environmental: 모듈형 목조 구조 건축 시스템을 지원하며, 층별(multi-story) 오클루전(occlusion) 처리와 L자형 지붕 연결 기능을 제공합니다. 일조 시뮬레이션은 천체 궤도(쌍둥이 달 및 행성 공전)에 따른 낮/밤 주기와 계절적 변화를 구현합니다.
  1. 게임플레이 및 시뮬레이션:
    • Combat System: NetHack/D&D 스타일의 서버 권한(server-authoritative) 전투 시스템을 채택했습니다. 6가지 핵심 속성(STR, DEX, CON, INT, WIS, CHA)은 3≤attribute≤183 \le \text{attribute} \le 18 범위 내에서 결정되며, 캐릭터 생성 시 4d64d6 주사위 방식을 사용합니다.
    • Inventory & Physics: 중량 제한 기반의 인벤토리와 11개 슬롯의 페이퍼 돌(paper-doll) 시스템이 적용되었습니다. 지형의 층(floor) 개념이 아이템 픽업 로직에 반영되어, 특정 층에 드롭된 아이템은 해당 높이에서만 상호작용이 가능합니다.
  1. 기술 스택 상세:
    • Shared Library: shared/ 크레이트(Crate)를 통해 서버, 클라이언트(WASM), 에이전트 클라이언트 간에 게임 로직을 공유하여 일관성을 유지합니다.
    • Deployment: systemd를 활용한 서비스 관리와 RUST_LOG 환경 변수를 통한 상세 로깅을 지원하며, 배포는 rsync와 SIGTERM을 통한 우아한 종료(graceful shutdown) 메커니즘을 사용합니다.

OpenMMO는 이러한 기술적 설계를 통해 클라이언트와 서버 간의 엄격한 유효성 검사를 수행하며, 에이전트와 플레이어 간의 인위적인 구분 없는 진정한 의미의 평등한 가상 사회를 구현하는 데 초점을 맞추고 있습니다.