खेल का लॉग सब कुछ बताना बंद करता है
पहले एक ही पासा फेंकने पर पाँच पंक्तियाँ छपती थीं, जिनमें से दो एक ही खाने का नाम लेती थीं। अब यह धारा किसी कमेंट्री की तरह पढ़ी जाती है, कार्यवृत्त की तरह नहीं — और इसके लिए कुछ भी हटाया नहीं गया।
आसान शब्दों में
बोर्ड के बग़ल वाला पैनल वह हर एक चीज़ लिख रहा था जो खेल करता था। एक साधारण चाल पाँच अलग-अलग पंक्तियाँ बनाती थी — फेंका, चला, पहुँचा, चाल ख़त्म की, और अक्सर एक और — जिनमें से दो एक ही खाने का नाम लेती थीं। इसे चार खिलाड़ियों और तीस राउंड से गुणा कीजिए, और यह धारा एक ऐसी दीवार बन जाती थी जिसे आप पढ़ना छोड़ देते थे — अफ़सोस की बात, क्योंकि जो दो-तीन पंक्तियाँ सचमुच मायने रखती थीं, वे उसी के भीतर कहीं थीं।
अब एक चाल और उससे हुई हर चीज़ एक ही पंक्ति है। किसी खाने पर पहुँचना, चाल ख़त्म करना, भुगतान से पहले क़र्ज़ की घोषणा, नीलामी खुलने से पहले ख़रीदने से इनकार — इनमें से कुछ भी अब कहा नहीं जाता, क्योंकि बोर्ड या अगली पंक्ति पहले ही यह कह देती है। एक ही ज़मीन पर लगातार किए गए निर्माण एक पंक्ति में सिमट जाते हैं, बिना मुक़ाबले वाली नीलामी वही रक़म दो बार बोलना बंद कर देती है, और स्पीड में गिरवी की उलटी गिनती तभी बोलती है जब कार्रवाई के लिए दो राउंड बचे हों।
आपके चैट संदेश भी अब स्क्रीन से बाहर नहीं धकेले जाते। पैनल पहले सब कुछ के लिए इतिहास की एक ही खिड़की रखता था, इसलिए व्यस्त बोर्ड चुपचाप किसी के लिखे को बाहर कर देता था। अब गतिविधि और चैट अलग-अलग रखे जाते हैं, और चाहे जितने पासे चलें, किसी इंसान का लिखा संदेश दबता नहीं।
तकनीकी जानकारी
स्रोत पर छानना कभी विकल्प था ही नहीं। किसी बाज़ी को दोहराने का मतलब है पूरे इवेंट लॉग को मोड़कर वापस एक स्थिति बनाना — पेज रीलोड, दर्शक मोड, रीप्ले व्यू और क्लिप रेंडरर सब ऐसे ही काम करते हैं। लॉग को सुंदर बनाने के लिए कोई घटना हटाइए, और ये सब बिगड़ जाएँगे। इसलिए लॉग पूरा रहता है और संक्षेपण सिर्फ़ रेंडर के समय होता है — एक साझा बिल्डर में, जिसे लाइव बोर्ड, दर्शक व्यू, रीप्ले, क्लिप और ऑफ़लाइन बिल्ड सब इस्तेमाल करते हैं।
कौन-सी घटना लॉग के साथ क्या करती है, यह इंजन की सभी घटना-क़िस्मों पर एक संपूर्ण स्विच है — यानी कोई नई क़िस्म तब तक कंपाइल ही नहीं होती जब तक कोई तय न कर दे कि उसे कैसे पढ़ा जाना चाहिए:
// lib/game/feedDigest.ts — an exhaustive switch over every engine event
case 'dice_rolled':
return 'move'; // the roll opens a line
case 'moved':
case 'passed_start':
case 'jail_attempt_failed':
return 'absorb'; // …and what it caused folds into that line
case 'landed': // names the cell 'moved' just named
case 'turn_ended': // the board already shows whose turn it is (14% of events)
case 'payment_due': // the intent; 'debt_paid' is the settlement, with the amount
case 'buy_declined': // always followed by 'auction_started', which says it better
case 'auction_passed':// carries no information, and outnumbers real bids 2:1
return 'hidden';दो ऐसी ख़राबियाँ मिलीं जिन्हें कोई टेस्ट नहीं पकड़ पाता, क्योंकि दोनों इस बारे में थीं कि आउटपुट पढ़ने में कैसा लगता है, न कि उसमें क्या है। बिना मुक़ाबले वाली नीलामी वही आँकड़ा दो बार बोलती थी — «P1 ने 2600k की बोली लगाई», फिर «P1 ने इसे 2600k में जीता» — इसलिए अब आख़िरी बोली निगल ली जाती है, और सिर्फ़ वही, ताकि असली बोली-युद्ध अब भी मुक़ाबले की तरह पढ़ा जाए। और चाल के बीच में पड़ी एक घटना हर चाल-पंक्ति को समय से पहले ख़त्म कर देती थी, जब तक बिल्डर को उसे लाँघना नहीं सिखाया गया।
