इस प्रोजेक्ट के बारे में

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 जिसमें बैटलफील्ड, हैंड, स्टैक, टार्गेटिंग ओवरले, माना पेमेंट, एनिमेशन, और एम्बिएंट ऑडियो शामिल हैं। - Axum WebSocket सर्वर के माध्यम से मल्टीप्लेयर, जिसमें छिपी जानकारी, लॉबी सिस्टम, और PeerJS के माध्यम से WebRTC पीयर-टू-पीयर शामिल है। - MTGGoldfish से स्क्रैप किए गए मेटागेम फीड, जो प्रतिदिन अपडेट होते हैं। - एक डेक बिल्डर जिसमें कार्ड सर्च, विज़ुअल बिल्डिंग, और .dck/.dec इम्पोर्ट शामिल है। - क्रॉस-प्लेटफॉर्म टार्गेट: Tauri डेस्कटॉप (Windows, macOS, Linux), ब्राउज़र PWA, टैबलेट, और Android APK। - Scryfall से कार्ड इमेज, IndexedDB कैशिंग के साथ। 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 बनाती है, और डिपेंडेंसी इंस्टॉल करती है। एक समर्पित मल्टीप्लेयर सर्वर Docker इमेज के रूप में उपलब्ध है, जो हेल्थ और WebSocket एंडपॉइंट एक्सपोज़ करता है, साथ ही पोर्ट, डेटा डायरेक्टरी, 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 एजेंट को प्रॉम्प्ट सौंपकर कार्ड इम्प्लीमेंटेशन में योगदान देने के वर्कफ़्लो का भी वर्णन करता है।