프로젝트 소개
phase.rs는 Magic: The Gathering 규칙 엔진과 게임 클라이언트를 구현한 비상업적 팬 프로젝트입니다. 엔진은 Rust로 작성되었으며 네이티브 코드와 WebAssembly 모두로 컴파일되어 Tauri 데스크톱 애플리케이션, 브라우저 PWA, WebSocket 기반 멀티플레이 서버를 구동합니다. 프런트엔드는 React, TypeScript, Tailwind v4, Zustand, Framer Motion, Vite로 구성됩니다.
README에 설명된 핵심 기능:
- 턴, 우선권, 스택, 전투, 상태 기반 행동, 레이어, 트리거, 대체 효과를 다루는 규칙 엔진.
- MTGJSON에서 파싱된 카드 데이터, Commander, Modern, Pioneer, Standard, Legacy, Vintage, Pauper 등의 포맷 지원.
- 카드별 의사결정 로직, 게임 트리 탐색, 평가 휴리스틱을 사용하는 AI 상대.
- 전장, 손패, 스택, 타게팅 오버레이, 마나 지불, 애니메이션, 환경 오디오를 갖춘 게임 UI.
- 숨겨진 정보, 로비 시스템, PeerJS를 통한 WebRTC 피어 투 피어를 지원하는 Axum WebSocket 서버 기반 멀티플레이.
- MTGGoldfish에서 스크래핑되어 매일 갱신되는 메타게임 피드.
- 카드 검색, 시각적 빌딩, .dck/.dec 가져오기를 지원하는 덱 빌더.
- 크로스 플랫폼 대상: Tauri 데스크톱(Windows, macOS, Linux), 브라우저 PWA, 태블릿, Android APK.
- IndexedDB 캐싱을 사용하는 Scryfall 카드 이미지.
Rust 워크스페이스는 크레이트로 분할됩니다: engine(타입, 게임 로직, 파서, 카드 데이터베이스), phase-ai(평가, 합법적 행동, 탐색), engine-wasm(wasm-bindgen + tsify 바인딩), server-core(세션 관리), phase-server(Axum WebSocket 서버), feed-scraper(독립형 메타게임 스크래퍼). 프런트엔드는 전송 계층에 구애받지 않는 EngineAdapter 인터페이스를 사용하며 WASM, Tauri IPC, WebSocket, WebRTC 호스트/게스트 구현을 갖춥니다. 설계 원칙에는 순수 리듀서, serde와 tsify를 통해 직렬화되는 판별 유니온, rpds를 통한 구조적 공유를 사용하는 불변 상태가 포함됩니다.
설정에는 Rust 툴체인, wasm32 타깃, wasm-bindgen-cli, 선택적 wasm-opt, Node.js 22+, pnpm이 필요합니다. 설정 스크립트는 데이터를 가져오고, WASM을 빌드하고, 의존성을 설치합니다. 전용 멀티플레이 서버는 헬스 및 WebSocket 엔드포인트를 노출하는 Docker 이미지로 제공되며, 포트, 데이터 디렉터리, CORS 오리진, 로비 전용 모드, JSON 로깅, 로그 디렉터리, 관리자 베어러 토큰을 위한 환경 변수를 갖춥니다. Kubernetes용 Helm 차트가 제공됩니다. Linux 데스크톱 오디오는 GStreamer 플러그인에 의존하며, AppImage, .deb, Flatpak 패키징이 논의되고, Flatpak은 배포 공백과 NVIDIA 유휴 CPU 동작을 커버하기 위한 것입니다. Android 빌드에는 특정 SDK, NDK, Rust 타깃이 필요하며, 릴리스 APK는 구성된 시크릿으로 서명됩니다.
이 프로젝트는 MIT 또는 Apache 2.0의 이중 라이선스입니다. Wizards 자산을 번들로 포함하지 않으며, 런타임에 Scryfall에서 카드 이미지와 마나 심볼을 가져오고, Wizards of the Coast와 제휴 관계가 없다고 명시합니다. README는 또한 LLM 에이전트에 프롬프트를 전달하여 카드 구현을 기여하는 워크플로를 설명합니다.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.