À propos du projet
phase.rs est un projet de fan non commercial implémentant un moteur de règles et un client de jeu Magic: The Gathering. Le moteur est écrit en Rust et se compile à la fois en code natif et en WebAssembly, alimentant une application de bureau Tauri, une PWA navigateur et un serveur multijoueur basé sur WebSocket. Le frontend utilise React, TypeScript, Tailwind v4, Zustand, Framer Motion et Vite.
Capacités principales décrites dans le README :
- Moteur de règles couvrant les tours, la priorité, la pile, le combat, les actions basées sur l'état, les couches, les déclencheurs et les effets de remplacement.
- Données de cartes analysées depuis MTGJSON, avec prise en charge de formats tels que Commander, Modern, Pioneer, Standard, Legacy, Vintage et Pauper.
- Un adversaire IA utilisant une logique de décision par carte, une recherche dans l'arbre de jeu et des heuristiques d'évaluation.
- Interface de jeu avec champ de bataille, main, pile, superpositions de ciblage, paiement de mana, animations et audio d'ambiance.
- Multijoueur via un serveur WebSocket Axum avec informations cachées, système de lobby et pair-à-pair WebRTC via PeerJS.
- Flux de métagame scrapés depuis MTGGoldfish et mis à jour quotidiennement.
- Un deck builder avec recherche de cartes, construction visuelle et import .dck/.dec.
- Cibles multiplateformes : bureau Tauri (Windows, macOS, Linux), PWA navigateur, tablette et APK Android.
- Images de cartes depuis Scryfall avec mise en cache IndexedDB.
L'espace de travail Rust est divisé en crates : engine (types, logique de jeu, parseur, base de données de cartes), phase-ai (évaluation, actions légales, recherche), engine-wasm (liaisons wasm-bindgen + tsify), server-core (gestion de session), phase-server (serveur WebSocket Axum) et feed-scraper (scraper de métagame autonome). Le frontend utilise une interface EngineAdapter agnostique du transport avec des implémentations WASM, Tauri IPC, WebSocket et WebRTC hôte/invité. Les principes de conception incluent des reducers purs, des unions discriminées sérialisées via serde et tsify, et un état immuable avec partage structurel via rpds.
L'installation nécessite une toolchain Rust, la cible wasm32, wasm-bindgen-cli, wasm-opt en option, Node.js 22+ et pnpm. Un script d'installation récupère les données, compile le WASM et installe les dépendances. Un serveur multijoueur dédié est disponible sous forme d'image Docker exposant des endpoints de santé et WebSocket, avec des variables d'environnement pour le port, le répertoire de données, l'origine CORS, le mode lobby uniquement, la journalisation JSON, le répertoire de logs et un jeton bearer admin. Un chart Helm est fourni pour Kubernetes. L'audio du bureau Linux dépend des plugins GStreamer ; l'empaquetage AppImage, .deb et Flatpak est abordé, le Flatpak étant destiné à couvrir les lacunes de distribution et le comportement CPU au repos avec NVIDIA. Les builds Android nécessitent des SDK, NDK et cibles Rust spécifiques, et les APK de release sont signés avec des secrets configurés.
Le projet est sous double licence MIT ou Apache 2.0. Il déclare ne regrouper aucun actif de Wizards, récupérant les images de cartes et les symboles de mana depuis Scryfall à l'exécution, et n'est pas affilié à Wizards of the Coast. Le README décrit également un workflow pour contribuer des implémentations de cartes en transmettant un prompt à un agent LLM.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.