Diablo 1 هو لعبة كلاسيكية 1996 و roguelike. كانت هذه واحدة من أولى المحاولات الناجحة لإدخال الجماهير إلى roguelike ، والتي كانت حتى ذلك الحين رسومات متخصصة في شكل فن ASCII. ولدت اللعبة عدة عواقب والعديد من المحاكاة. وهي معروفة بجوها المظلم القاتم ، حيث تتحول سماكة اللاعب إلى الأبراج المحصنة الواقعة تحت مدينة تريسترام. لقد كانت واحدة من الألعاب الأولى التي أنتجت فيها خريطة إجرائية ، وإمكانية توليد مثل هذه المستويات المقبولة صدمتني.
لقد اكتشفت مؤخرًا أنه نظرًا لاكتشاف العديد من الملفات التي تحمل رموز تصحيح الأخطاء ، تولى العديد من عشاق اللعبة مهمة
هندسة التعليمات البرمجية المصدر لتنظيفها ومعرفة ما بدا عليه الرمز الذي كتبه المطورون. هكذا بدأت رحلتي التي استغرقت أسبوعًا في دراسة كيفية قيام المطور الرئيسي David Brevik بإنشاء هذه المستويات. ربما بسبب هذا ، انهار سحر اللعبة بالنسبة لي جزئيًا ، لكنني تعلمت العديد من التقنيات التي ستكون مفيدة لمطوري الألعاب المماثلة ، لذلك في هذه المقالة سأشاركها.
بفضل David Brevik وفريق Blizard North على إنشاء مثل هذه اللعبة الرائعة ، وكذلك galaxyhaxz وفريق Devilution على عملهم المدهش في استعادة شفرة المصدر القابلة للقراءة للمشروع.
مقدمة
Diablo هي لعبة تتكون من البلاط متساوي القياس. تتكون اللعبة من 4 مراحل ، لكل منها 4 مستويات. مراحل اللعبة: الكاتدرائية ، سراديب الموتى ، الكهوف والجحيم. هناك أيضًا عدة مستويات ثابتة ، على سبيل المثال ، مدينة تريسترام ، والتي لن أعتبرها في المقالة. لدى Diablo إجراءات منفصلة لإنشاء المستوى لكل مرحلة من المراحل الأربع ، لذا سأتحدث أولاً عن ميزاتها ، ثم أفكر بشكل منفصل في تشغيل كل مرحلة من المراحل.
كنت مهتمًا فقط بكيفية إنشاء المستويات. لمعرفة المزيد عن المهام ، الوحوش ، إلخ. أوصي بقراءة
دليل Jarulf's Diablo و Hellfire ، الذي يصف هذه الجوانب بالتفصيل.
الميزات العامة
على الرغم من أن كل مرحلة بها مولد مستوى خاص بها ، إلا أنها تتميز بميزات مشتركة.
الأبراج المحصنة والبلاط
يتم إنشاء كل مستوى من مستويات اللعبة لملء شبكة من البلاط 40 × 40. يتوافق المحور X مع الجنوب الشرقي ، والمحور Y يتوافق مع الجنوب الغربي.
يتم استخدام هذه البلاط فقط لمهام إنشاء المستوى. بعد إنشاء المستوى ، يتم تقسيم كل بلاطة إلى 4 "شظايا زنزانة" ، والتي يتم عرضها على الشاشة.
يتم استخدام هذه الشبكة الأكثر تفصيلاً لتحديد البلاط المنقول كما توفر إعادة استخدام أكثر كفاءة لذاكرة الرسومات. في وقت سابق ، كتبت عن
مخططات تقسيم البلاط .
هذا يعني أن بطاقة Diablo القياسية تتكون من أكثر من مئة بلاطة ، وكثير منها عبارة عن اختلافات بسيطة في البعض الآخر ، لمراعاة جميع الطرق الممكنة للاتصال بها. سنتحدث عن هذا لاحقا.
لدهشتي ، على عكس الألعاب الأخرى في هذه السلسلة ، لا تتألف خرائط الأبراج المحصنة من كتل تم إنشاؤها مسبقًا. يتم إنشاء كل شيء تقريبًا باستخدام الخوارزميات.
عملية متعددة المراحل
ينقسم كل إجراء جيل المحصنة إلى مرحلتين. قبل الجيل لا يتعامل مع اختيار البلاط على الإطلاق. إنه ببساطة يولد مجموعة يتم فيها تمييز البلاط القابل للقطع ، والبلاط الذي توجد به الأبواب ، وبعض التفاصيل الأخرى عالية المستوى. في المرحلة الثانية ، يتم تحويل هذا الزنزانة الفارغة إلى صفيف من البلاط ، وبعد ذلك يتم إجراء التوليد ويتم إجراء تغييرات مع مراعاة هذه التجانبات.
هذا يجب أن يكون مناسب بشكل لا يصدق للمصمم. يمكنك تجربة خطة أرضية مستقلة تمامًا عن اختيار البلاط والأناقة. ولكن في كثير من الحالات ، فهي مترابطة ، مما يوفر إحساسًا أكثر شمولية بالمستوى.
تبدأ جميع مراحل إنشاء الفراغات المحصنة بمستوى مليء بـ "الصلابة" الصلبة ، وبعد ذلك تتحول الأجزاء الفردية من المستوى بشكل متكرر إلى بلاطات أرضية. سأناقش هذا بمزيد من التفصيل أدناه.
شظايا الانتهاء
الشظايا المنتهية هي كتل مستوى تم إنشاؤها مسبقًا والتي يتم إدراجها ببساطة في مستوى تم إنشاؤه عشوائيًا. يتم استخدامها لمعظم المهام اللعبة. في كل مستوى ، يمكن أن يكون هناك جزء واحد تم الانتهاء منه فقط ، ويتم تحديد موقع كل مرحلة على حدة.
يعد Butcher's Den واحدًا من أوائل المقتطفات المعدة مسبقًا والموجودة في اللعبة.مجموعات صغيرة
مجموعات مصغرة هي طريقة أخرى لإدراج المحتوى في مستوى المحتوى الذي تم إنشاؤه مسبقًا. هذه عبارة عن قطع صغيرة ، عادة ما يكون حجمها حوالي 3 × 3 ، يتم إدخالها بشكل عشوائي في الزنزانة. هناك مخطط بسيط لمطابقة الأنماط ، بفضله تظهر فقط في الأماكن "الصحيحة". غالبًا ما يتم تشفيرها بمتطلبات إضافية ، على سبيل المثال ، لا يمكن وضع مجموعات مصغرة بالقرب من بعضها البعض ، ولا يمكن أن تتداخل مع الأجزاء الجاهزة ، وهكذا. تقوم بعض المجموعات الصغيرة بالبحث والاستبدال دائمًا ، بينما يقوم البعض الآخر بذلك باحتمال ثابت.
تستخدم مجموعات مصغرة Diablo لأغراض مختلفة. يتم استخدامها لوضع كائنات كبيرة من البلاط ، مثل الدرج ، لإصلاح مجموعات من البلاط التي لا ترتبط جيدًا مع بعضها البعض ، ولإضافة أشكال عشوائية إلى البلاط.
الغرف المواضيعية
الغرف ذات الموضوعات الصغيرة عبارة عن مساحات صغيرة محاطة بجدار وباب. عادة في نفوسهم بطريقة عشوائية توجد كائنات محددة سلفا. على سبيل المثال ، تحتوي المكتبات دائمًا على خزانة كتب تحتوي على شمعتين من كل جانب وعدة نهايات عشوائية وحوش. تحتوي Monster Lairs على العديد من الوحوش وبند عشوائي ، وهكذا.
على مستويات مرحلة الكاتدرائية ، يقوم المولد بإنشاء غرف مناسبة يتم التعرف عليها عن طريق
الملء وإعادة استخدامها. في مراحل أخرى ، تجد الخوارزمية مساحات مفتوحة يتم فيها رسم الجدران والباب لإنشاء غرف.
كل نوع من أنواع الغرف المواضيعية له متطلبات معينة للحجم والمرحلة التي يتم إنشاؤها فيه.
بدائل البلاط
تحتوي بعض البطاقات على تكييف خاص للبلاط ، لكن جميعها لها ميزة مشتركة: يمكن استبدال بعض التجانيف بصيغ مختلفة. تحتوي أكثر أنواع البلاط القياسية (على سبيل المثال ، الأرضيات والجدران المسطحة) على أشكال مختلفة ، مما يقلل من رتابة المستوى. لا يتم إعادة استخدام بدائل البلاط جنبًا إلى جنب.
مقارنة الأنماط و "التصحيحات"
كما ذكر أعلاه ، يتم استخدام مجموعات مصغرة كآلية بحث واستبدال بتصحيح عيوب المولد. ولكن في معظم المراحل ، هناك إجراءات تكتشف وتصلح المزيد من المشكلات المحددة. لن أخوض في التفاصيل ، لأن هناك مجموعة منهم فقط. يكفي أن نقول أن ديابلو عربات التي تجرها الدواب جميلة ، وأقرب من الإصدار أصبح من الواضح أنه سيكون من الأسهل إضافة اعتراف بمشاكل محددة بدلاً من القضاء على أسبابها الأساسية.
أحد "الإصلاحات" الأكثر شيوعًا هو "القفل": فقد تحقق مما إذا كان من الممكن المرور عبر الزنزانة بأكملها ، وبدأ الجيل مرة أخرى إذا لم يكن كذلك.
المهام
تم إنشاء معظم المهام باستخدام شظايا جاهزة ، ولكن البعض استخدم منطقهم الخاص. على سبيل المثال ، يُنشئ Zhar the Mad غرف مكتبة مواضيعية ، ويتم إنشاء مدخل المياه المسمومة عن طريق الاتصال المصغر ، ويحتوي Anvil of Fury على رمز إنشاء مستوى معين. لن أخوض في التفاصيل ، لكن الكود مليء بالتحققات المشابهة للطلبات.
كاتدرائية
الكاتدرائية هي على الأرجح الأكثر شهرة في مراحل ديابلو. إنه يتميز بصفوف طويلة من الأقواس القوطية ، وغرف ضيقة والعديد من الاختناقات في شكل مداخل. دعونا نرى كيف تم إنشاؤه.
المحصنة فارغة
أول شيء تقوم به الخوارزمية هو رسم جوهر البطاقة. يختار بشكل عشوائي ما يصل إلى ثلاث غرف 10 × 10 في مواقع محددة مسبقًا على طول المحور المركزي X أو Y. كما يتم رسم ممر واسع يربط الغرف على طول المحور. إذا كانت هناك شظية نهائية على المستوى ، فهي موجودة دائمًا في وسط إحدى هذه الغرف. تتميز هذه الغرف المحصنة المركزية بأنها غير مناسبة للجدران الجديدة ، بحيث تظل دائمًا مساحات مفتوحة كبيرة.
يتم إنشاء جميع الغرف الأخرى من خلال تقنية مهدها العودية في وظيفة تسمى
L5roomGen
، والتي يتم تشغيلها في كل من هذه الغرف ، وعن طريق اختيار محور.
وظيفة L5roomGen
- إنها تمرر مستطيل الغرفة الأصلية ، والتي تحتاج منها إلى البدء في مهدها ، وكذلك المحور المفضل.
- مع احتمال 1/4 ، يتغير المحور المفضل.
- يتم تحديد حجم عشوائي للغرفة الجديدة ، مع 2 أو 4 أو 6 البلاط على كل جانب.
- لكل جانب من الغرفة الأصلية على طول المحور المحدد (مثل SE / NS لـ X و SW / NE لـ Y):
- محاذاة الغرفة الجديدة تتماشى مع مركز حافة الغرفة الأصلية
- يتم التحقق من أنه قبل ذلك لم يتم رسم أي شيء ولم نصل إلى نهاية الخريطة. تتطلب الجدران حدًا من البلاط.
- إذا تم التحقق بنجاح ، يتم سحب الغرفة.
- لكل غرفة يتم
L5roomGen
، يتم استدعاء L5roomGen
بشكل متكرر ، والذي يمر بالغرفة الجديدة والمحور المقابل لتلك المستخدمة سابقًا.
في نهاية المطاف ، يبدأ هذا الإجراء بعدة غرف مقطوعة داخل البلاط "الصلب" ، ثم تلصق المستطيلات الجديدة مرارًا وتكرارًا لقطع المساحات الصالحة الجديدة. في هذه المرحلة ، تفتح جميع "الغرف" على جانب واحد ، لأن كل غرفة جديدة تقع مباشرة بجوار الغرفة السابقة ، دون المرور لوضع الجدران.
ثم يقوم المولد بحساب عدد البلاطات المتقاطعة التي تم إنشاؤها. إذا كان أقل من الحد الأدنى ، والذي يزيد مع كل مستوى ، يتم تدمير الأبراج المحصنة ويتم تنفيذ محاولة التوليد من جديد.
تحت أرضي
حتى الآن ، تحتوي الخوارزمية على بلاطات "صلبة" ونوع الجنس. نحن بحاجة إلى استبدالها ببلاط الجدران الحقيقي. لهذا ، يستخدم Diablo خوارزمية المربعات المسيرة ، والتي
وصفتها في مقالة سابقة .
ومع ذلك ، تستخدم اللعبة الاختلاف غير عادية. يحتوي تجانب الكاتدرائية على الجدران ، لكنهم موجودون دائمًا على الحافة البعيدة للبلاط. لذلك ، هناك بلاطة بجدار على الحافة الشمالية الشرقية ، لكن لا توجد بلاطات بجدار على الحافة الجنوبية الشرقية. لإنشاء جدران على جوانب أخرى ، تحتاج إلى العثور على بلاط "صلب" يحتوي على جدار إضافي يمتد من الخارج إلى خارج البلاط. هذا يبدو غريباً ، ولكنه في الحقيقة مناسب جدًا لفرز الجدران بعمق.
للتعامل مع هذا ، يتخطى ديابلو بعض الجدران خلال مرحلة مكعبات السير:
تضاف جدران إضافية في وقت لاحق ، في مرحلة "الإصلاحات". أعتقد أن هذا الإجراء البسيط يؤثر بشكل كبير على "نمط" الكاتدرائية. نظرًا لأن الجدران المقابلة موصولة بالبلاط الصلب ، في حالة وجود غرفتين مفصولتين ببلاط حائط واحد ، لن يتم إنشاء الجدار المقابل. هذا يعني أن الفواصل بين الغرف "أرق" مما يمكنك الحصول عليه في الدقة التي تنفذ بها المربعات المسيرة.
بعد وضع الجدران الرئيسية ، يضيف المولد أربعة أعمدة قائمة بذاتها إلى كل من الغرف المركزية وسلسلة من الأقواس للممر المركزي. يسمح لك هذا بمنح الكاتدرائية شعوراً بالتصميم بشكل مدروس أكثر من المستويات الأخرى ، كما يساعد اللاعبين على التنقل.
المولد ثم يضيف عشوائيا تقسيم الجدران. الجدران المنفصلة تسير دائمًا على طول المحور من جدار إلى آخر. أنها تبدأ من الزوايا ، بحيث يتم تقسيم المناطق الجميلة إلى غرف. في 25 ٪ من الحالات ، يكون الجدار عبارة عن سلسلة من الأقواس ، وفي 25 ٪ من الحالات ، هو عبارة عن سلسلة من الأقواس ذات المشابك التي تسد المدخل ، وفي جميع الحالات الأخرى تكون عبارة عن جدار صلب. في حالة حواجز شبكية وجدران صلبة ، في مكان ما على طول الجدار الفاصل ، يضاف الباب أو القوس بشكل عشوائي لجعل الفضاء مقبولاً.
يكتشف إجراء التعبئة غرفًا ذات موضوع محتمل.
يتم وضع السلالم للاتصال بمستويات أخرى. إذا كان من المستحيل وضعها ، فإن محاولة إنشاء المحصنة تبدأ من جديد.
أما بالنسبة لترتيب المجموعات الصغيرة ، "الإصلاحات" والاستبدال ، فلن أعتبرها بالتفصيل. والأهم من ذلك كله ، أنني أحب المجموعة المصغرة PANCREAS1 ، والتي لديها فرصة بنسبة 1٪ في وضع كومة من اللحم الملطخ بالدم على بلاط الأرضية. في النهاية ، يتم وضع 5-10 أشياء مصباح عليها لتزيين المحصنة.
سراديب الموتى
على عكس الكاتدرائية ، التي يبدو أنها مبنى مصمم ، فإن Catacombs تشعر بمزيد من العفوية. إنها تتميز بغرف مربعة متصلة ببعضها بواسطة العديد من الممرات المتعرجة. في العديد من الأماكن ، بدلاً من الأبواب ، توجد فتحات واسعة. مما يزيد من احتمال أن يكون اللاعب محاطًا بالعديد من الأعداء.
تم استخدام خوارزمية الجيل الأكثر تعقيدًا في اللعبة لإنشاء سراديب الموتى. أظن أن ضيق الوقت أجبر المطورين على تطبيق حلول أبسط في المراحل اللاحقة.
المحصنة فارغة
إجراءات إنشاء زنزانة فارغة لسراديب الموتى هي فريدة من نوعها للغاية. في جميع المراحل الأخرى ، هناك قيمة منطقية واحدة تشير إلى وجود أو عدم وجود الجنس (بالإضافة إلى مجموعة من البتات للحصول على تفاصيل إضافية). سراديب الموتى تخزين المحصنة فارغة في شكل بطاقة ASCII ، تقريبا مثل roguelike الكلاسيكية. وهذا ليس مفاجئًا بشكل خاص بالنظر
إلى اعتراف
ديفيد بريفيك بأنه استلهم ديابلو من Angband .
مولد الغرفة الرئيسية هو مرة أخرى خوارزمية عودية ، ولكن هذه المرة قسم عودي. يتم
CreateRoom
وظيفة
CreateRoom
لمنطقة المحصنة بأكملها من 40 × 40 ناقص البلاط الحدودي 1.
وظيفة CreateRoom
CreateRoom
تمرير الدالة CreateRoom
إلى مستطيل يشير إلى المنطقة التي تريد إنشاء غرف بداخلها. يتم تمرير التفاصيل أيضًا إلى الوظيفة المتعلقة بالغرفة الأصلية (لاغية في البداية)- إذا كانت المنطقة ضيقة جدًا ، فسيتم إنهاء الوظيفة.
- يتم تحديد حجم عشوائي للغرفة من 4 إلى 9 بلاطات على كل جانب ، مع مراعاة الحد الأقصى لحجم المنطقة التي ترغب في وضعها في الغرفة.
- في المنطقة ، يتم اختيار موقع عشوائي لوضع الغرفة.
- يتم تقديم الغرفة على خريطة ASCII. في الشكل ، الرمز
'.'
يشار إلى بلاط الأرضية ، الرمز '#'
هو الجدار المحيط ، والحروف 'A'
، 'B'
، 'C'
و 'E'
هي الزوايا الأربع. - إذا كانت الغرفة تحتوي على غرفة مصدر:
- يتم اختيار البلاط العشوائي في أقرب حواف الغرف الأصلية والجديدة.
- يتم تسجيل هذه المعلومات في قائمة الممرات ، والتي سيتم استخدامها لاحقًا.
- الأجزاء المتبقية من المنطقة ، باستثناء الغرفة الحالية ، مقطوعة ، مكونة أربعة مستطيلات.
- يتم تقليل حجم كل مستطيل بواسطة اثنين من البلاط لإنشاء مسافة بين الغرف ، ومن ثم
CreateRoom
الدالة CreateRoom
بشكل متكرر ، والمنطقة التي يستخدم هذا المستطيل ، والغرفة التي تم إنشاؤها كمصدر.
إذا كان هناك جزء مكتمل على الخريطة ، فسيظل دائمًا في الغرفة الأولى التي تم إنشاؤها بواسطة CreateRoom ، ويتم إنشاء أبعادها بحيث يتم وضع هذا الجزء فيه.
بعد استدعاء
CreateRoom
على مجموعة ASCII مماثلة لتلك الموضحة أدناه (شكرا
nomdenom لاستخراجها من التعليمات البرمجية):
A##B #..# A####B #..# #....# #..# #....# C##E #....# C####EA#####B #.....# #.....# A########B #.....# #........# #.....# #........# C#####E #........# A#B #........# #.# #........# #.# #........# #.# #........# #.# #........# #.# C########E #.# #.# A#BC#E #.# A####B #.# #....# #.# #....# #.# #....# #.# C####E #.# #.# A#####BC#E #.....# A###B #.....# #...# #.....# C###E #.....# C#####E
في هذه الحالة ، كانت غرفة "الجذر" ، التي تم إنشاؤها أصلاً ، هي الأدنى.
ثم يتم تطبيق معلومات الممر التي تم جمعها سابقا. يتم رسم خط بين كل زوج من النقاط المسجلة. عندما يعبر الجدار ،
'D'
كتابة
'D'
، وعندما يعبر البلاط الصلب
','
. يكون للممرات عرض عشوائي: 1 أو 2 أو 3. يتم استخدام بلاطات الركن للمساعدة في التنقل.
إذا كانت الأبواب مجاورة لباب آخر ، فيتم تخطيها ، ويمكن أن تتداخل الممرات مع بعضها ، مما يسمح لك بإخفاء بساطة المولد.
بعد تسجيل جميع الممرات ، يتم مسح بطاقة ASCII. تصبح بلاطات الركن بلاطات حائطية ، والبلاط
' '
بجانب
','
يصبح أيضًا جدرانًا. أخيرًا ، يتم استبدال الأحرف
','
بالأحرف
'.'
. حتى نحصل على خطة المحصنة المبينة أدناه.
#### #..# ###### #..# #....# #..# #....# #D## #....# #.# #D#### ##D#### #..# #.....# #..# ###.....# ##D######## #.D.....# #........# #.#.....# #........# ### #.##D#### #........# #.### #.##...# #........###.D.# #.##...# #........##..#.# #.##...# #........##..#.# #.##...# #........##..#.# #.##...# #........##..#.# #.##...# ###D#######..#.# #.##...# #.......#..#.# #.###D## ###.....#..### #.# #.# #######D##.# #.# #.# #....#.# #.# #.# #....D.# #.# #.# #....###### #.# #.# ##D####....## #.# #.# #...........# #.# #.# ####....###D####.# ### ######.....##.# #####.D.....##.# #...D.#.....D..# #####.#.....#### #########
كما ترون ، يمكن لهذا الإجراء أن يترك مساحة فارغة على الخريطة. لذلك ، فإن الخطوة التالية للمولد هي "ملء الفراغات". يبحث عن أي مقاطع حائط مجاورة يمكن لصقها على مستطيلات أرضية إضافية. يمكن أن تكون المستطيلات 5 × 5 على الأقل ولا يزيد حجمها عن 12 × 14.
يستمر ملء الفراغ حتى يتم الحصول على 700 بلاطة كحد أدنى ، أو الوصول إلى حد إعادة المحاولة. إذا فشل المولد في الوصول إلى 700 بلاطة ، فسيبدأ توليد الأبراج المحصنة من الصفر.
هذا يعطينا المحصنة فارغة المبينة أدناه.
########## #........# ########### #........# #.........# #........# #.........# #........# #.........# #### #........# #.........# #..# #######..###.........# #..# #..............# #..# #..............# #D## #..............# #.# #D####.........# ##D#### #..# ########### #.....# #..# ###.....# ##D######## #.D.....# #........# #.#.....# ########........# ### #.##D#### #...............# #.### #.##...# #...............###.D.# #.##...# #...............##..#.# #.##...# #...............##..#.# #.##...# #...............##..#.# #.##...# #...............##..#.# #.##...# #......###D#######..#.# #.##...# #......# #.......#..#.# #.###D## #......# ###.....#..### #.# #.# #......#########D##.# #.# #.# #.........# #....#.# #.# #.# #.........# #....D.# #.# #.# #.........# #....###### #.# #.# #.........# ##D####....## #.# #.# #.........# #...........# #.# #.# #.........# ####....###D####.# ### #.........# ######.....##.# #.........# #####.D.....##.# #.........# #...D.#.....D..# ########### #####.#.....#### #########
تحت أرضي
مرة أخرى ، فإن سراديب الموتى تختلف عن صيغة مستوى قياسي. بدلاً من خوارزمية المربعات المسيرة (التي تعين المربعات استنادًا إلى المربعات 2 × 2 من الزنزانة الفارغة) ، فإنها تستخدم إجراء مطابقة النمط الخاص بها ، والذي يفحص كل من المستطيلات 3 × 3 من الزنزانة الفارغة ويحدد المربعات المقابلة لها. تحدد الأنماط ما يجب أن يكون عليه كل بلاط محصن: جدار أو أرضية أو باب أو بلاطة صلبة أو مزيج منها. أنا لا أفهم تماما السبب.
سوف تبقى بقية الوظيفة مألوفة لك من الكاتدرائية. يتم وضع الدرج لأعلى ولأسفل على الخريطة ، ويتم فحص الأبراج المحصنة بحثًا عن إمكانية المرور الكامل ، كما يتم إجراء تصحيحات مختلفة. كما هو موضح في قسم الميزات العامة ، يتم إدراج الغرف ، تليها العديد من المجموعات الصغيرة واستبدال البلاط.
أعتقد أن المجموعات الصغيرة تؤثر بطريقة أو بأخرى على المداخل ، لكنها مملة جدًا للقراءة بدون أدوات ، لذلك لم أتطرق إلى هذا الموضوع.
الكهوف
تمتلئ مستويات الكهوف بمساحات مفتوحة واسعة وأنهار الحمم البركانية. جدران هذه المنطقة خشنة ومتموجة. المكونات المستطيلة الوحيدة هنا هي السقالات الخشبية ، التي ظهرت فيما يبدو متأخرة عن الكهوف نفسها.
هذه المرحلة هي واحدة من أجمل الألعاب بفضل الحمم المتحركة. يشعر المرء أنه يختلف تمامًا عن المستويات السابقة المكونة من الغرف. لذلك ، فوجئت جدًا بأن الجزء الرئيسي من الجيل مصمم وفقًا لمبادئ مرحلة الكاتدرائية ، ويتم إعطاء البطاقات مظهرًا أكثر "كهفًا" باستخدام الحيل الصعبة.
المحصنة فارغة
يبدأ إنشاء مستوى الكهف بغرفة واحدة 2 × 2 عشوائية تقع في مكان ما بالقرب من مركز الخريطة. يقوم المولد بعد ذلك باستدعاء الإجراء
DRLG_L3CreateBlock
لكل حافة من هذه الكتلة.
عند رسم المستطيلات على هذا المستوى ، لا يتم استخدام التعبئة العادية. دائمًا ما تكون المساحات الداخلية صلبة ، لكن كل قطعة على الحدود لديها فرصة بنسبة 50٪ لتصبح أرضية ، وإلا فإنها تظل صلبة.
إجراء DRLG_L3CreateBlock
- تحصل هذه الوظيفة على حافة المستطيل ، أي نقطة الانطلاق والاتجاه والطول.
- يتم تحديد حجم الكتلة المنشأة حديثًا في حدود 3-4 لكل جانب.
- يتم وضع الكتلة الجديدة بشكل عشوائي نسبة إلى حافة الإدخال.
- إذا لم يكن هناك مساحة كافية لرسم كتلة ، ثم يتم تنفيذ الخروج.
- يتم رسم الكتلة.
- مع احتمال 1/4 ، يتم تنفيذ الإخراج.
- يتم استدعاء
DRLG_L3CreateBlock
لمدة ثلاثة حواف ، بالإضافة إلى الحافة التي أتينا منها.
على الرغم من أن هذا الإجراء يشبه
L5roomGen
، إلا أن استخدام حجم كتلة أصغر بكثير ورسم حدود خشنة
L5roomGen
. بالإضافة إلى ذلك ، لا يتضمن حدًا واحدًا للبلاط للجدران ، وبالتالي ، على عكس المولدات السابقة ، يمكنه إنشاء حلقات.
بعد إنشاء رسم تقريبي لشكل الزنزانة ، يطبق المولد إجراءات التآكل:
- أولاً ، يجد مساحات من البلاطات 2 × 2 ذات بلاطات صلبة متقابلة قطريًا. غالبًا ما يكون من الصعب التعامل مع هذه التكوينات عند تنفيذ المربعات المسيرة ، لذلك يتم استبدال أحد البلاط الصلب عشوائيًا حسب الجنس.
- يتم استبدال جميع البلاط الأحادي الصلب المحاط ببلاط الأرضيات 8 ببلاط أرضي.
- يتم تقطيع جميع أقسام الجدار الطويلة والمستقيمة بشكل عشوائي عن طريق استبدال 50٪ من الجدران ببلاط الأرضيات.
- يتم بشكل متكرر القضاء على الأقطار من البلاط المستمر.
تضيف كل هذه الإجراءات مزيدًا من بلاطات الأرضيات ، بحيث تصبح الخريطة أكثر انفتاحًا.
إذا كانت تحتوي على أقل من 600 بلاطة أرضية ، فسيتم تجديد الخريطة.
تحت أرضي
يتم تحويل الفراغات المحصنة إلى مربعات باستخدام مربعات المسيرة. على عكس الكاتدرائية و Catacombs ، فإن البلاط هو أكثر ملاءمة هنا ، ويحتوي على جميع التركيبات اللازمة لساحات المسيرات تقريبًا. لا توجد بلاطات للجدران المعاكسة قطريًا ، لكن تم إزالتها في مرحلة الشغل ، بحيث لا تظهر أبدًا.
ثم ، كالعادة ، هناك العديد من مجموعات مصغرة. يحتوي الكود على عدة مجموعات صغيرة تحدد قسمًا منفصلًا من الجدران واستبدله بالصدمات الأرضية والأرضيات ، مما يزيد من انفتاح المساحات.
تضاف بحيرات الحمم البركانية. تبحث الخوارزمية عن قسم جدار مجاور باستخدام
الملء . إذا تمكن من العثور على قسم من الجدران / البلاط الصلب الذي يقل عن 40 بلاطًا محاطًا تمامًا بالبلاط الأرضي ، فسيتم استبداله بحمم بركانية. إذا تعذر العثور على بحيرة الحمم البركانية ، فسيبدأ جيل الأبراج المحصنة من جديد.
يتحول 3 × 3 جدار إلى بحيرة الحمم البركانيةثم يتم إضافة العديد من أنهار الحمم البركانية. يقوم المولد بعدة محاولات لرسم نهر يبدأ عند بحيرة الحمم البركانية وينتهي عند الحائط. يتم فرض المتطلبات التالية على النهر: يجب ألا يعبر نفسه ، يبلغ طول البلاط من 7-100 ، ويجب أن يكون هناك مكان مناسب للجسر عليه. يضمن بلاط الجسر بقاء الخريطة بأكملها صالحة. إذا كان هناك مساحة على الخريطة ، فيمكنك إضافة أربعة أنهار.
ثم يتم وضع الغرف تحت عنوان. في هذه المرحلة ، تكون جدران الغرف المواضيعية عبارة عن أسوار خشبية لا يمكنك المرور من خلالها ، ولكن يمكنك مشاهدتها. يستخدم السياج الخشبي أيضًا في الإجراءين التاليين. الأول يضع سياجاً على جميع الأجزاء المتبقية من الجدران ، مع وجود أقسام مستقيمة طويلة إلى حد ما. يرسم الثاني خطًا من الأسوار على الخريطة ، من حائط إلى الجهة المقابلة ، ثم يُدخل الباب. على عكس الإجراء المتبع في إنشاء كاتدرائية ، فإنه لا يبحث عن الزوايا للبدء في إنشاء هذه الجدران.
الجحيم
الجحيم هي المرحلة الأخيرة من ديابلو. في ذلك ، التركيز الرئيسي هو بالفعل على الوحوش ، وتصميم المستويات يذهب على جانب الطريق. تحتوي هذه المرحلة على أصغر مجموعة بلاطات ، ويستخدم معظمها في السلالم الضخمة والخماسية. تتكون المستويات الجهنمية عادة من عدة غرف مربعة ولها تصميم متماثل.
المحصنة فارغة
يبدأ جيل الجحيم بغرفة عشوائية مكونة من 5-6 بلاطات على كل جانب (أكثر إذا كان يحتوي على جزء جاهز للسعي) ، ثم يتم تطبيق نفس مهد العودية كما في الكاتدرائية. ومع ذلك ، يقتصر الجيل على 20 × 20.
يضاف ممر عمودي وأفقي ، ويمتد إلى حافة المنطقة 20 × 20.
ثم يتم عكس المحصنة فارغة أفقيا وعموديا للحصول على الحجم الكامل.
تحت أرضي
يتم تحويل الفراغات المحصنة مرة أخرى إلى مربعات باستخدام مربعات المسيرة. ثم ، على غرار إنشاء الكاتدرائية ، تتم إضافة الجدران ، كما هو الحال في سراديب الموتى والكهوف.
استنتاج
لقد استمتعت حقًا بقراءة هذا الرمز. على الرغم من وجود أخطاء في ذلك بوضوح ، يتم تعيين الأسماء بشكل عشوائي ، ولا يمكن إعادة إنشاء بعض الأجزاء في شفرة مصدر عالية الجودة ، فمن الواضح أن هذا الرمز اجتاز اختبارًا جادًا من خلال المعركة وأنه مليء بالأفكار الذكية.
فيما يلي أهم الدروس بالنسبة لي:
- الشيطان هو في التفاصيل: المكونات الفردية ليست معقدة بجنون ، ولكن عندما مجتمعة ، فإنها تعطي شيئا رائعا. أستطيع أن أتخيل كيف كان المطورون يشعرون بالقلق تجاه تحسين الجودة حتى تحولت المستويات من جيدة إلى مذهلة. عدد التجانبات والتعقيد التوافقي للبلاطات كبير أيضًا - من المستحيل تنفيذ ذلك دون الانتباه إلى كيفية توصيل العناصر.
- يعد البحث عن مطابقة الأنماط واستبدالها أداة قوية جدًا يمكنك من خلالها تنفيذ العديد من التأثيرات المختلفة. يعمل على إصلاح أخطاء الجيل ، ويضيف التباين ، ويدرج المحتوى الذي تم إنشاؤه مسبقًا ، ويدير التآكل وغير ذلك الكثير.
- تقسيم جيل المحصنة في خريطة المباح (إعداد المحصنة) وتوليد البلاط هو أيضا تقنية مريحة للغاية ، سواء من حيث التصميم والتصحيح.
- , . , .
- , .