Sobre o projeto

phase.rs é um projeto de fã sem fins lucrativos que implementa um motor de regras e cliente de jogo de Magic: The Gathering. O motor é escrito em Rust e compila tanto para código nativo quanto para WebAssembly, impulsionando um aplicativo desktop Tauri, um PWA de navegador e um servidor multiplayer baseado em WebSocket. O frontend usa React, TypeScript, Tailwind v4, Zustand, Framer Motion e Vite. Capacidades principais descritas no README: - Motor de regras cobrindo turnos, prioridade, pilha, combate, ações baseadas em estado, camadas, gatilhos e efeitos de substituição. - Dados de cartas analisados do MTGJSON, com suporte a formatos como Commander, Modern, Pioneer, Standard, Legacy, Vintage e Pauper. - Um oponente de IA usando lógica de decisão por carta, busca em árvore de jogo e heurísticas de avaliação. - Interface de jogo com campo de batalha, mão, pilha, sobreposições de alvo, pagamento de mana, animações e áudio ambiente. - Multiplayer via servidor WebSocket Axum com informações ocultas, sistema de lobby e peer-to-peer WebRTC através de PeerJS. - Feeds de metagame coletados do MTGGoldfish e atualizados diariamente. - Um construtor de decks com busca de cartas, construção visual e importação .dck/.dec. - Alvos multiplataforma: desktop Tauri (Windows, macOS, Linux), PWA de navegador, tablet e APKs Android. - Imagens de cartas do Scryfall com cache IndexedDB. O workspace Rust é dividido em crates: engine (tipos, lógica de jogo, parser, banco de dados de cartas), phase-ai (avaliação, ações legais, busca), engine-wasm (bindings wasm-bindgen + tsify), server-core (gerenciamento de sessão), phase-server (servidor WebSocket Axum) e feed-scraper (coletor de metagame autônomo). O frontend usa uma interface EngineAdapter agnóstica de transporte com implementações host/guest para WASM, IPC Tauri, WebSocket e WebRTC. Os princípios de design incluem redutores puros, uniões discriminadas serializadas via serde e tsify, e estado imutável com compartilhamento estrutural via rpds. A configuração requer um toolchain Rust, o alvo wasm32, wasm-bindgen-cli, wasm-opt opcional, Node.js 22+ e pnpm. Um script de configuração busca dados, compila WASM e instala dependências. Um servidor multiplayer dedicado está disponível como imagem Docker expondo endpoints de saúde e WebSocket, com variáveis de ambiente para porta, diretório de dados, origem CORS, modo somente lobby, log JSON, diretório de log e token de administrador bearer. Um chart Helm é fornecido para Kubernetes. O áudio no desktop Linux depende de plugins GStreamer; empacotamento AppImage, .deb e Flatpak são discutidos, com o Flatpak destinado a cobrir lacunas de distribuição e comportamento de CPU ociosa do NVIDIA. Builds Android exigem SDK, NDK e alvos Rust específicos, e APKs de lançamento são assinados com segredos configurados. O projeto é dual-licenciado sob MIT ou Apache 2.0. Ele afirma não incluir ativos da Wizards, buscando imagens de cartas e símbolos de mana do Scryfall em tempo de execução, e não é afiliado à Wizards of the Coast. O README também descreve um fluxo de trabalho para contribuir com implementações de cartas entregando um prompt a um agente LLM.