مطور اللعبة VVVVVV تكريما لعقدها جعل شفرة المصدر مفتوحة


اليوم هو الذكرى العاشرة لإطلاق سراح VVVVVV!

على الرغم من أنه ، ربما ، غدًا ، بالمعنى الدقيق للكلمة ، أصبحت اللعبة متوفرة أولاً في الساعة 3 صباحًا بتوقيت جرينتش في 11 يناير 2010 ، بعد يوم طويل جدًا من التخلص من جميع الأخطاء التي خلقتها ، وإنشاء مجموعات في اللحظة الأخيرة ومحاولة تحميل كل شيء ببطء إلى الخادم عبر إنترنت غير موثوق للغاية مركب كان يكسر باستمرار. لكنني دائمًا أعيش مع الشعار " غدًا لم يأت حتى استيقظت " ، لذلك أعتقد أن تاريخ الإصدار الحقيقي هو 10 كانون الثاني (يناير)

يا إلهي ، عشر سنوات.

كانت VVVVVV لعبة مهمة بالنسبة لي حتى أنني لا أعرف من أين أبدأ. كنت أرغب في وضع علامة على هذا التاريخ بطريقة خاصة ، ولذا فإنني اليوم أكشف عن الكود المصدري للعبة!

[شفرة مصدر VVVVVV على جيثب]

يحتوي المستودع على نسختين - سطح المكتب الأول ، تم نقله بواسطة Simon Roth إلى الإصدار C ++ في عام 2011 ، والإصدار الأحدث ، والذي تم تحديثه ودعمه بواسطة إيثان لي ، بالإضافة إلى إصدار الهاتف المحمول المكتوب في Actionscript for Adobe AIR ، استنادًا إلى إصدار الفلاش الأصلي للعبة v1.0 .

أود أن أقول شكراً جزيلاً لإيثان لي ، الذي ساعدني كثيرًا ، بما في ذلك في إعداد مستودع للمجتمع وتنظيم الإعلان عن ذلك على AGDQ (مرحبًا ، سباق السرعة!)! شكرا إيثان!


لمحة موجزة عن شفرة المصدر


هنا سيكون من المنطقي طرح السؤال: "ما هو المثير للاهتمام في شفرة مصدر VVVVVV؟" .

أعتقد أنه حتى نظرة سريعة على الكود المصدري ، يمكنك أن تفهم بسرعة أن لعبة VVVVVV من الناحية الفنية ليست مدروسة جيدًا! حتى وفقًا لمعايير المطورين الذين يدرسون بشكل مستقل ، فإن الكود فوضوي للغاية.

ملاحظات / تفسيرات محتملة للاهتمام عن سبب ظهور كل شيء تمامًا كما هو:

  • يحتوي إصدار C ++ على مجموعة من الأشياء الغريبة التي تصبح منطقية فقط إذا كنت تتذكر أنه تم إنشاء اللعبة لأول مرة على ومضة ثم نقلها مباشرةً بكل عيوبها. على سبيل المثال ، ربما تكون عادة البرمجة المعتادة الخاصة بي هي إعلان المتغيرات المؤقتة مثل i و j و k كأعضاء في كل فئة بحيث لا يتعين إعلانها داخل الدالات (وهو ممل لسبب ممل). أدى ذلك إلى ظهور العديد من الأخطاء السيئة والصعبة ، على أقل تقدير. على وجه الخصوص ، تحتوي بعض وظائف حساب تصادمات الكيانات على متغير مشترك i . لذلك ، حلقات لانهائية ممكنة.
  • إذا كنت تبحث عن نصوص اللعبة ، فمعظمها (ولكن ليس كلها) في فئتي Scripts.cpp و TerminalScripts.cpp . في جوهرها ، تقوم هذه الوظائف بتحميل البيانات في محلل نص بسيط للغاية يتحكم في منطق cutscene. حقيقة مضحكة: منذ عدة سنوات ، عكف المتداولون على تصميم " البرمجة النصية الداخلية " بشكل عكسي للقيام بأشياء مذهلة بمستويات محلية الصنع ، والتي لم يكن بإمكاني تخيلها.
  • في مرحلة ما من عملية التطوير ، قررت أن تقسيم الشفرة إلى الإدخال والمنطق والعرض كان عادةً جيدة ، وقد أخذته بعين الاعتبار. الجزء الرئيسي من التعليمات البرمجية المهمة للعبة هو في ثلاثة ملفات - input.ccp ، logic.cpp والمسمى بشكل غير صحيح titlerender.cpp . يتم تجميع كل حالة من اللعبة في هذه الملفات الثلاثة تحت أسماء الوظائف مثل teleporterrender و towerlogic . هناك مجموعة من نسخ لصق.
  • جميع المستويات مرفوعة في الصفائف الضخمة التي تم إنشاؤها في محرر الملفات الخاص بي ، والتي تقوم بتصدير المستويات إلى الكود المصدري الذي يمكنني أن أقرأ منه. هذه هي الطريقة التي عملت بها عند إنشاء لعبة فلاش في عام 2009 - كان الوصول إلى موارد البيانات الخارجية مهمة صعبة ، لذا كان من المنطقي في ذلك الوقت تجميعها في اللعبة نفسها. تم إنشاء جميع الملفات الكبيرة حقًا (مثل Spacestation2.cpp و Finalclass.cpp وما إلى ذلك) بهذه الطريقة. للتأكد من اكتمالها ، قمت بتحميل رمز المحرر هنا ، ولكن بصراحة ، لا ينطبق هذا بشكل خاص الآن (يتطلب الأمر تجميع Allegro و Mingw). لتغيير مخطط المستويات الأخيرة ، كتبت أداة مماثلة!
  • عندما كتبت الكود ، لم أفهم حقًا كيف تعمل الفصول الثابتة ولماذا تعتبر استخدامها فكرة جيدة. يبدو أنني قرأت في مكان ما أن الفصول الثابتة والمتغيرات العامة هي BAD في الفلاش ، لذلك حاولت تجنبها تمامًا. ما هي النتيجة؟ حرفيًا ، تمر كل وظيفة في اللعبة بالوسائط التالية: "الرسومات و dwgfx ، اللعبة واللعبة ، mapclass & map ، entityclass & obj ، UtilityClass & help" .
  • في الواقع ، لا توجد كائنات مؤقتة في VVVVVV ، وخلال التهيئة الأولى للعبة ، تملأ جميع صفائف الكيانات (ومعظم صفائف البيانات الأخرى) بمئات الكيانات الفارغة. يحدث هذا لأنني قرأت في مكان ما أن حذف الكائنات في الفلاش يسبب فرملة غريبة ، لأن أداة تجميع مجمعي البيانات المهملة تدخل وتبطئ كل شيء ، وهذا صحيح إلى حد ما. واصلت الالتزام بهذه العادة الغريبة في المشاريع الجديدة حتى وقت قريب - في Dicey Dungeons ، لقد تخلت عنها أخيرًا.
  • وهناك شيء آخر: إلى جانب محلل cutscene ، كان لديّ طريقة أخرى للتحكم في منطق اللعبة أثناء المرور - آلة متناهية الصغر للحالة المحدودة ، والتي كانت في نهاية المشروع خارجة عن السيطرة تمامًا! يمكن العثور عليها في Game :: updatestate ، وأوصي بقراءتها ، حتى إذا كنت لا ترغب في قراءة أي كود آخر. إنه يدير جوانب مثل إطلاق بداية عمليات قطع معقدة ، والنقاط التي يرسل عندها المراقبون عن بعد اتصالات ، وتوقيت إتمام الرسوم المتحركة على مستوى ، والعديد من الأشياء الأخرى التي أردت إدخالها في اللعبة بسرعة. الولايات مرقمة والأكبر هو 4099 (هناك أرقام غير مستخدمة). عند تطوير اللعبة ، كان هناك دفتر ملاحظات بجواري ، حيث تم كتابة الأرقام الأكثر أهمية: رقم 1000 بدأ اختيار "حلية لامعة" ، بدأ الرقم 3،040 في إكمال مستوى واحد معين ، وبدأ الرقم 3500 في نهاية اللعبة. تسبب هذا النظام الغبي في لعبة speedran رائعة في 50.2 ثانية في فئة أي ٪ .

لا أعرف ماذا أقول عن هذا؟ كنت صغيراً ، وكان من المثير للاهتمام بالنسبة لي إنشاء شيء على الشاشة أكثر من تنفيذه بشكل صحيح. ربما الأفضل في شفرة مصدر VVVVVV - لقد أصبح دليلاً على أنه يمكنك إنشاء شيء بنفسك ، حتى لو لم تكن مبرمجًا جيدًا.

إذا نظرنا إلى الوراء بعد كل هذه السنوات ، أجد أنه من المضحك للغاية أن كل هذا كان في معظمه نسخة متعددة من نفس الأجزاء بقيم متغيرة. وبسبب هذا ، بعد عشر سنوات ، يكاد يكون من المستحيل الحفاظ على الكود ، لكن بينما كنت في أحسن حالاته ، تمكنت من إجراء تكرارات سريعة جدًا وإضافة عناصر جديدة. خلال العقد الماضي ، طورت عادات أفضل ، وبالتأكيد نمت كثيرًا كمبرمج ، لكن الآن يبدو أنني أعمل ببطء أكبر بسبب هذا.


حفلة مفاجأة الذكرى!


بينما كنت أستعد لنشر المقال ، أعلن سيرجيو كورناجا عن ازدحام اللعبة تكريما لعقد VVVVVV!

عيد الميلاد الـ 10 لـ VVVVVV eVVVVVVent!

أنا سعيد جدًا بهذا ، هاها ، وأنا أحب موقع حطام القطار المجيد ، الذي أقيم مربيات Klik of the Month بانتظام ، والتي شاركت باستمرار في وقت قريب من تطوير VVVVVV. يبدو أن تكون مثالية لهذا المربى!

أنا متحمس جدًا لمعرفة ما سيأتي به الأشخاص بعد نهاية المربى ، وسأكتب منشورًا كبيرًا على مدونتي تلخص أسلوب المشاركات القديمة حول مستويات المستخدم VVVVVV التي كتبت ذات مرة <3

حتى قبل إصدار الكود المصدري للعبة ، فتحت الوصول المجاني إلى الأدوات اللازمة لإنشاء واستكمال مستويات VVVVVV في إصدار 2014 من Make and Play ! يمكنك تنزيله من هنا! إذا كنت مهتمًا بإنشاء مستويات في محرر VVVVVV ، فيمكنك البدء بهذا الموضوع ! حظا سعيدا



قليلا من المشاعر


لقد تحدثت بالفعل عن كيف يستحضرني VVVVVV - قبل وقت قصير من الذكرى السنوية الأولى ، كتبت ما جربته عندما خرجت اللعبة وكيف غير نجاحها حياتي . في الذكرى السنوية الخامسة ، كتبت أن VVVVVV بدا لي أنه مشروع لا يحدث إلا مرة واحدة في العمر ، ولم يقترب منه شيء من قبل أو بعده.

بعد عشر سنوات ، ما زلت أشعر بنفس الطريقة. أنا فخور بشكل لا يصدق VVVVVV وشاكرا على كل شيء. أود أن أشكر كل من ساعدني في طريقي - ماغنوس على موسيقاه المدهشة ، وإيثان وسيمون على كل عملهما الذي جعل اللعبة متاحة لعامة الناس ، وبينيت لأسماء الغرف ، وستيفن لمساعدته في إنشاء تجميع لنظام التشغيل Mac في يوم الإصدار. هذه اللعبة خاصة بالنسبة لي ، بفضل كل من لعبها ودعمني لمدة عشر سنوات. وهذا يعني الكثير بالنسبة لي. <3

Source: https://habr.com/ru/post/ar483518/


All Articles