صفحات القواعد صارت تصف اللعبة التي نقدّمها فعلًا
كتاب القواعد والدليل وصفحة «كيف تلعب» ابتعدت عن اللعبة. أُعيدت كتابتها كلها، وكسب الدليل ست صور، وانضمت إليها خمس صفحات مرجعية جديدة.

بكلمات بسيطة
الصفحات الأربع التي تشرح opolyx كانت قد تخلّفت بهدوء عن اللعبة التي تشرحها. لم يرد نمط الفرق ولو مرة واحدة في كتاب القواعد أو الدليل، مع أنك تستطيع اختياره في الردهة. وكانت الخانة 20 تُسمّى «موقف مجاني»، بينما هي الجائزة الكبرى منذ شهور — ولم يذكر كتاب القواعد الجائزة الكبرى إطلاقًا. وقال قسم السجن إنك تُطلَق بعد ثلاث محاولات فاشلة، بينما الحقيقة أنك تُغرَّم الكفالة. وأغفلت قواعد الإيجار الزيادة التي تمنحها بطاقاتك القابلة للجمع. وعرضت صفحة «كيف تلعب» بطاقة خروج من السجن لا وجود لها في اللعبة.
وأسوأ سطر كان في الدليل: «افز بمباراة حقيقية بعد الجولة 20 وتكسب بطاقة عقار زائد 200 نقطة خبرة». العتبة خمس جولات لا عشرون، ومنذ تحديث التقدّم يكسب كل مقعد نقاط خبرة — أي أن تلك الجملة كانت خاطئة بعشر لغات دفعة واحدة. أُعيدت كتابة الصفحات الأربع كلها انطلاقًا من الشفرة: انتقل كتاب القواعد من 13 قسمًا إلى 17 وصار يغطي كل الأنماط، والدليل من 22 إلى 26.

وللدليل الآن صور حيث لم تكن غالبًا: عشرة أشكال بدل أربعة، كلها ملتقطة من مباريات حقيقية. الشراء والمزادات والبناء وسداد الدين ونرد السرعة والجائزة الكبرى صار لكلٍّ منها لقطة، وأُعيد التقاط ثلاث لقطات قديمة لأنها كانت تُظهر لوحة لم نعد نقدّمها.
وهناك خمس صفحات مرجعية جديدة لمن يحب التفاصيل: إحصاءات من نحو أربعة آلاف مباراة محاكاة، ومرجع للوحة خانةً خانة، ودليل استراتيجي مستمد من تلك الإحصاءات لا من الرأي، ومسرد بثمانية عشر مصطلحًا، ومقارنة نزيهة مع Monopoly One — اللعبة التي صُمّم opolyx على غرارها.
للمهتمين بالتفاصيل التقنية
التوثيق ينحرف لأنه نسخة. والعلاج، حيثما أمكن، هو التوقّف عن النسخ: كان جدول مقارنة الأنماط في الدليل نقلًا يدويًا لإعدادات الأنماط، وصار الآن يُولَّد من تلك الإعدادات نفسها.
// components/GuideDoc.tsx — the comparison table reads the real configuration
const columns = MODE_COLUMNS.map((mode) => ({ mode, cfg: modeConfig(mode) }));
return [
row('cash', (c) => c.startingCash.toLocaleString('en-US')),
row('turn', (c) => `~${c.turnSeconds}s`),
row('cap', (c) => String(c.roundCap)),
row('die', (c) => (c.speedDie ? `✓ (${c.speedDieFromRound}+)` : '—')),
];
// modeConfig() is what the game server reads when a game starts, so the table
// cannot drift from the rules actually being applied.وللصور الغائبة سبب آلي يستحق التذكّر. الدليل يعرض التسمية التوضيحية فقط حين تكون هناك لقطة مربوطة بذلك القسم — فخمس تسميات كُتبت وروجعت وتُرجمت إلى عشر لغات لم يرها أحد قط. وإضافة اللقطات أعادت خمسين نصًّا مترجمًا إلى العمل.
صفحة الإحصاءات هي الشيء الوحيد في الموقع الذي لا يمكن نسخه من مكان آخر: فهي ناتجة عن تشغيل المحرّك الحقيقي — الشفرة نفسها التي تدير مبارياتك — آلاف المرات عبر كل الأنماط وكل أعداد اللاعبين. وهي أيضًا اختبار لنفسها: جاء المعدّل المقيس للأزواج 16.68% مقابل 16.67% نظريًا، ويؤكّد اختبار هذا التطابق، لأنه أرخص برهان ممكن على أن المحاكاة ليست معطوبة بصمت.
