Sobre el proyecto
phase.rs es un proyecto de fans sin fines comerciales que implementa un motor de reglas y un cliente de juego de Magic: The Gathering. El motor está escrito en Rust y se compila tanto a código nativo como a WebAssembly, impulsando una aplicación de escritorio Tauri, una PWA de navegador y un servidor multijugador basado en WebSocket. El frontend usa React, TypeScript, Tailwind v4, Zustand, Framer Motion y Vite.
Capacidades principales descritas en el README:
- Motor de reglas que cubre turnos, prioridad, la pila, combate, acciones basadas en estado, capas, disparadores y efectos de reemplazo.
- Datos de cartas analizados desde MTGJSON, con soporte de formatos como Commander, Modern, Pioneer, Standard, Legacy, Vintage y Pauper.
- Un oponente de IA que usa lógica de decisión por carta, búsqueda en árbol de juego y heurísticas de evaluación.
- Interfaz de juego con campo de batalla, mano, pila, superposiciones de objetivo, pago de maná, animaciones y audio ambiental.
- Multijugador mediante un servidor WebSocket Axum con información oculta, sistema de salas y peer-to-peer WebRTC a través de PeerJS.
- Fuentes de metajuego extraídas de MTGGoldfish y actualizadas diariamente.
- Un constructor de mazos con búsqueda de cartas, construcción visual e importación .dck/.dec.
- Objetivos multiplataforma: escritorio Tauri (Windows, macOS, Linux), PWA de navegador, tableta y APKs de Android.
- Imágenes de cartas de Scryfall con caché IndexedDB.
El espacio de trabajo Rust está dividido en crates: engine (tipos, lógica de juego, analizador, base de datos de cartas), phase-ai (evaluación, acciones legales, búsqueda), engine-wasm (enlaces wasm-bindgen + tsify), server-core (gestión de sesiones), phase-server (servidor WebSocket Axum) y feed-scraper (rastreador de metajuego independiente). El frontend usa una interfaz EngineAdapter independiente del transporte con implementaciones WASM, Tauri IPC, WebSocket y WebRTC host/guest. Los principios de diseño incluyen reductores puros, uniones discriminadas serializadas mediante serde y tsify, y estado inmutable con compartición estructural mediante rpds.
La configuración requiere un kit de herramientas Rust, el objetivo wasm32, wasm-bindgen-cli, wasm-opt opcional, Node.js 22+ y pnpm. Un script de configuración obtiene datos, compila WASM e instala dependencias. Un servidor multijugador dedicado está disponible como imagen Docker que expone endpoints de salud y WebSocket, con variables de entorno para puerto, directorio de datos, origen CORS, modo solo sala, registro JSON, directorio de registro y token de administrador bearer. Se proporciona un gráfico Helm para Kubernetes. El audio de escritorio Linux depende de los plugins GStreamer; se discuten los empaquetados AppImage, .deb y Flatpak, con el Flatpak destinado a cubrir brechas de distribución y el comportamiento de CPU inactiva de NVIDIA. Las compilaciones de Android requieren SDK, NDK y objetivos Rust específicos, y los APKs de lanzamiento se firman con secretos configurados.
El proyecto tiene doble licencia bajo MIT o Apache 2.0. Declara que no incluye activos de Wizards, obteniendo imágenes de cartas y símbolos de maná de Scryfall en tiempo de ejecución, y no está afiliado con Wizards of the Coast. El README también describe un flujo de trabajo para contribuir con implementaciones de cartas entregando un prompt a un agente LLM.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.