من دون شك GTA Online ساهمت بشكل كبير في نمو مبيعات GTA V التي بلغت 140 مليون وكنا قد قدمنا لكم في مقال ثقافة الألعاب نظرة على تطور مبيعات GTA V منذ ٢٠١٣ حتى الآن ولكن هناك شيء كان دوماً يؤرق اللاعبين في الأونلاين تحديداً و هو أوقات التحميل الطويلة.
فعند البدء بدخول مباراة ما قد يستغرق الأمر عدة دقائق للتحميل وهذا من أجل تحميل الخريطة كاملة للعبة من ثم عمل مزامنة مع جميع اللاعبين حول العالم ثم مزامنة للشخصيات الثانوية بعالمها. ومزامنة جميع الادوات والممتلكات التي يمتلكها كل لاعب. هذا كله سيحتاج تقريباً 5 دقائق ليتم إكماله.
لذا مع الإعلان عن النسخة المحسنة من اللعبة للجيل الجديد كان على رأس المطالب اختفاء شاشات التحميل حيث تم إعادة تداول مقطع فيديو عبر شبكة ريديت يعود تاريخه لعام 2017 نشره أحد اللاعبين الذي تخيل لو أن اللعبة كانت دون أوقات تحميل بحيث يتم الدخول للعالم بشكل فوري. وقيل بأن تلبية هذا المطلب ليس بالصعب على روكستار مع سرعة 5.5 جيجا/ث التي تؤمنها سوني وحتى لو احتاج الأمر إلى تغير Net Code الخاص باللعبة لتتوافق مع هذه السرعة.
ولكن المفاجأة كانت بأن مبرمج واحد يدعى t0st تمكن من تقليل أوقات تحميل GTA Online بنسبة 70% حيث شغل اللعبة على حاسبه الذي يحوي GTX 1070 و AMD FX-8350 و KINGSTON SA400S37120G و 2X Kingston 8192 MB (DDR3-1337) بدقيقة وخمسين ثانية بدلاً من ستة دقائق! فكيف استطاع فعل ذلك؟
البداية مع اكتشاف المشكلة
قام t0st بفتح Task Manager وعندما قام بتشغيل اللعبة لاحظ أمر غريب فبعد مرور دقيقة ارتفع معدل استهلاك CPU بشكل كبير للغاية ولم يكن هناك أي حمل يذكر على استخدام الانترنت أو التخزين وهنا عرف بأن مشكلة طول مدة شاشات التحميل لم تكن بسبب سيرفرات روكستار أو أن ذلك الوقت هو الزمن الذي تستغرقه البيانات ليتم قراءتها من وحدة التخزين كما كان يخمن الكثيرون. إنما أصل المشكلة كانت بأن هناك شيء ما يستهلك المعالج وينهكه بعمليات المعالجة.
فماهي تلك المشكلة بالضبط؟
استخدم المبرمج بعض أدوات البرمجة وتصحيح الأخطاء ليحدد أصل المشكلة:
أولا: اللعبة كانت تجبر المعالج لقراءة ملف نصي لجميع العناصر التي يمكن شراؤها في اللعبة. يبلغ حجم كل ملف من هذه الملفات 10 ميجابايت ويحتوي كل منها على أكثر من 63 ألف عنصر واللعبة تتحقق من كل عنصر حرف بحرف مما يتطلب الكثير من الوقت. لا يعد إجراء هذا العد مرة واحدة أمر مهم ولكن القيام بذلك 63000 مرة يضيع الكثير من الوقت والضغط على المعالج المركزي.
ثانياً: من أجل تحضير بيانات العناصر ليتم قراءتها تقوم اللعبة بتسجيل البيانات المرتبطة بالعنصر (مثل الاسم والسعر والفئة والإحصائيات) وتسجيل كود تشفير هاش لكل منها وهذه العملية ستتكرر 63000 مرة. بالمحصلة وحسب تقدير t0st أن هناك 1،984،531،500 عملية تحقق أي ما يقرب من 2 مليار عملية. وهذا يستهلك الكثير من وقت ويفرض جهد على وحدة المعالجة المركزية. واللعبة تقوم بهذه العمليات للتأكد من عدم وجود عناصر مكررة في القائمة النهائية، ولكن يقول المبرمج بأن كل هذه العملية لا معنى لها بشكل أساسي نظراً لأن القائمة تكون فارغة تماماً وأن الملف الذي يتم تحميله لا يحتوي على نسخ مكررة.
كيف حل المشكلة؟
قام t0st بكتابة كود خاص به يقوم بإعادة كتابة بعض عمليات اللعبة. لحل مشكلة قراءة العناصر قام بإنشاء ملف كاش الذي يحسب قائمة العناصر ومن ثم يقوم بإعادة نفس القيمة دون الحاجة للقيام بعمليات الحساب مرة أخرى عندما يطلب كود اللعبة قراءة تلك العناصر. وهذا يختصر عدد مرات التحقق من العناصر من 63,000 مرة إلى مرة واحدة فقط. ويقتصر الكثير من العمل الذي لا داعي له.
الحل الثاني أسهل من الأول حيث يقول t0st بأنه ليس هناك من داعي للتحقق من وجود عناصر مكررة لأن الكود الخاص به يقوم فقط بإدراج العنصر الجديد مباشرة لذا لا داعي لعملية فحص التجزئة أو تشفير الهاش. أي ليس هناك ضرورة لإجراء الـ 2 مليار عملية تحقق وهذا يريح المعالج كثيراً.
النتيجة التي حصل عليها
بعد إجراء الإصلاح الأول أي تجنب فحص العناصر المكررة قال المبرمج بأنه اختصر أوقات التحميل التي كان حاسبه يستغرقها لتشغيل اللعبة من 6 دقائق إلى 4 دقائق ونصف، وبعد إجراء الإصلاح الثاني الخاص بتحميل العناصر ادى إلى تقليل العملية برمتها إلى دقيقة واحدة و 50 ثانية فقط.
إذاً لم لا تقوم روكستار بحل هذه المشكلة؟
المبرمج t0st دعا روكستار إلى القيام بإصلاح رسمي لمشكلة التحميل بناء على ما اكتشفه هو وقال بأن هذا الأمر لن يتطلب أكثر من عمل يوم واحد من قبل مبرمج واحد فقط. وعند سؤاله عن السبب الذي برأيه يمنعها من تبني هكذا حل بسيط وتلبية مطلب مهم للاعبيها فقال بأنه لا يملك خبرة المطور وأدوات التحقق من الأخطاء أو debugging tools لم تعطه إلا نافذة صغيرة للاطلاع على ما يجري في كود اللعبة لكنه يظن بأن الكود ربما تم اختباره على قائمة أصغر من العناصر لذا لم يلاحظ مطور اللعبة المشكلة التي قد تنجم عن وجود 64 ألف عنصر بتلك القائمة مثلاً.
ويضيف بأن الفريق المسؤول عن دعم GTA Online ربما يملك عدد قليل من المبرمجين الأصلين للعبة لذا آلية عمل الكود الخاص بها قد لا يكون مفهوم بشكل جيد عند هؤلاء. وأضاف بأنه هناك احتمال آخر أن يكون هذا قرار من الإدارة فمثلاً قد ترى بأن إضاعة وقت لتحري أسباب مشكلة طول أوقات التحميل ومن ثم العمل على إصلاحها أمر غير مجدي الاستثمار فيه وتفضل أن يركز الفريق أكثر على محتويات دعم الأونلاين. وبعيداً عن رأي t0st فهناك من يعتقد بأن روكستار تفضل عدم حل المشكلة حالياً بسبب انشغالها بنسخة الجيل الجديد التي سيتم تقديم انخفاض أوقات التحميل كإحدى مزاياها المهمة لذا فإن حل تلك المشكلة الآن سيضيع نقطة تسويقية هامة ومبرر لشراء النسخة الجديدة.
عموماً المبرمج قام بتوفير الملف الخاص بعمليات الإصلاح وطريقة تثبيته عبر موقع GitHub ولكن يجب أن ننوه هنا بأن التعديل على عمليات اللعبة والكود الخاص بها قد يعتبر عملية تهكير وبالتالي ربما يؤدي ذلك إلى حظر على حسابك بـ GTA Online لذلك قم بالتجربة على مسؤوليتك الخاصة.