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.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.