Öncelikle ana sorunuzu kısaca cevaplamak için, usule göre oluşturulmuş bir oyun dünyasının ana avantajları :
Dünya devasa olabilir , elle tasarlanmış herhangi bir oyun dünyasının olabileceğinden çok daha büyük olabilir.
Dünya (ya da en azından bir kısmı) her oyunda yeniden üretilebilir ve potansiyel olarak tekrar oynatma değeri artar, çünkü oyuncu her zaman keşfedilecek yeni bir şeye sahip olacaktır.
Tersine, prosedürel üretimin ana dezavantajları şudur:
Kullanılan üretim yöntemlerine bağlı olarak, dünyanın her zaman oynanabilir olduğundan emin olmak zor olabilir, yani oyuncu, dünya nesillerindeyken şanssız oldukları için devam etmenin hiçbir yolu ile sıkışıp kalamaz.
Tamamen oynanamaz dünyalar oluşturmaktan kaçınabilseniz bile, rastgele dünya üretimi oldukça değişken bir zorluk seviyesine yol açabilir: bazen, oyuncu almak için ihtiyaç duydukları her şeyi uygun bir şekilde bulabilir, bazen yararlı bir şey bulamadan uzun sürebilir .
Uzun süreler boyunca, bu tür rastgele dalgalanmalar ortama çıkma eğilimindedir, ancak oyunun zorluğu örneğin yoğun şekilde önden yüklenmişse (hayatta kalma oyunları için tipikse), kötü bir başlangıç bir oyunu mahvedebilirken çok şanslı bir başlangıç tüm mücadeleyi başarabilir.
Kötü yapılan prosedürel üretim, dünyanın monoton ve sıkıcı hissetmesine neden olabilir: rastgele oluşturulmuş bir düzine labirent gördükten sonra, ayrıntılarda farklı olsalar bile hepsi aynı görünmeye başlar.
Ayrıca, oyun dünyası her oyun için tamamen yenilenirse, oyuncunun önceki oyunlardan tanıyabileceği sabit konumlar veya özellikler olmayacaktır. Bu tür bir aşinalık eksikliği, oyuncunun oyuna duygusal bir düzeyde dahil olmasını veya deneyimlerini diğer oyuncularla paylaşmasını zorlaştırabilir.
Her iki listede de sayabileceğiniz tek bir şey var: dünyanın her oyun için rastgele yenilendiği bir oyunda, her oyun farklı olacağından, bir “adım adım” rehberi diye bir şey olamaz.
(Bu tekrar edilemezlik aynı zamanda, test ve hata ayıklama için de bir problem olabilir, bununla birlikte, en azından kısmen RNG tohumunun belirtilmesine izin verilmesi, en azından hata ayıklama modunda ve / veya "hile" komutunun sağlanmasıyla önlenmesi mümkün olabilir. farklı aşamalara hızlı ileri sarma.)
Bununla birlikte, dezavantajlar listesine bakarsanız, çoğunlukla saf prosedürel üretimin dezavantajlarını tanımladığını göreceksiniz ; manuel olarak ve işlemsel olarak üretilen içeriğin karıştırılması ile çoğundan kaçınılabilir .
Örneğin, oyuncu her zaman sabit, elle tasarlanmış bir kasabada başlayabilir, belki de daha geniş veya daha az sabit bir ana bölge ile çevrili olabilir, ancak kasabanın uzağındaki yerler, oyuncuya keşfedilecek her zaman yabancı bölgeler sağlamak için rastgele oluşturulabilir.
Ayrıca, el ile tasarlanmış başka şehirler veya dünyada rastgele yerleştirilen başka yerler de olabilir, böylece oyuncu onları bulmak zorunda kalacak, ancak oraya vardıklarında ne bekleyeceklerini bilecek. Buna karşılık, dağlar gibi öne çıkan özellikler manuel olarak yerleştirilebilir (en azından sabit başlangıç yerinin yakınına), ancak arazilerinin detayları rastgele olabilir.
Kilitlenmelere ve zorluk çeşitliliğine neden olan rastgele yerleştirmelere gelince, işlemsel dünya oluşturma algoritmanızın üzerine çeşitli tutarlılık ve denge kontrolleri uygulanarak ele alınabilir. Örneğin, oyuncu su geçmesi için belirli bir öğeye ihtiyaç duyuyorsa, oyuncuya su geçmeden ulaşabilmesi için böyle bir öğenin yerleştirildiğinden emin olmak için bazı kodlar ekleyebilirsiniz.
Benzer şekilde, oyuncu yerleştirme kurallarınızda ince ayar yapmak isteyebilirsiniz, böylece oyuncu x seviyesine ulaşmadan önce hiçbir denge bozucu uygunsuzluk değneği yerleştirilmeyebilir ve belki de en az birinin oyuncunun ulaşabileceği sabit bir yere yerleştirilmesini sağlamak için hayatta kalmak için ihtiyaç duydukları aşamaya gelmeden önce .
Bu arada, prosedürel ve manuel olarak oluşturulan içeriği daha fazla veya daha az kesintisiz bir şekilde ağ haline getirmenin yaygın bir yolu, prosedürel dünya üreteci kullanarak (belki de uygun şekilde ayarlanmış, örneğin istediğiniz bir köy veya dağ tepe oluşturmak için el ile oluşturma işlemine başlamaktır. ) tasarladığınız bölgeyi başlatmak için, ardından istediğiniz ayrıntıları eklemek ve ayarlamak için elle ince ayar yapın. (Bu ayrıca, yalnızca manuel değişiklikleri ve kullanılan jeneratör tohumunu ve parametrelerini kaydederek çok kompakt düzeyde depolamaya da izin verebilir.)
Manuel ve prosedürel içeriği birleştirmenin diğer yolları, rasgele içerikle doldurulacak manuel olarak tasarlanmış seviyelerinizde boş noktalar bırakmayı içerir (örneğin bir kale zindanlarda rastgele oluşturulmuş bir labirent içerebilir, sadece dış hatlar ve çıkışlar sabitlenir) veya manuel tasarım, sadece seviyenin bazı kısımlarının (örneğin bir kasabadaki evlerin yerleştirilmesi) genel hatlarını belirleyebilir ve rastgele toplanacak detayları (her evin tam görünüşü gibi) bırakabilir.
Aslında, tamamen oyun dünyasını sabit hatta birçok oyun kullanmak bazı (doğal görünümlü arazi üreten ya da bir ormanda bireysel ağaçları yerleştirerek gibi) dünya üretiminin bazı yönleri vardır, çünkü onların seviye tasarım sürecinin bir parçası olarak prosedürel nesil formu bu, elle yapılması zor ve / veya sıkıcıdır, fakat otomatikleştirilmesi nispeten kolaydır.
Buna karşılık, çoğu yordamsal dünya jeneratörü, dünyayı oluşturmak için en azından bazı elle tasarlanmış nesneler ve unsurlar kullanacaktır. Biri kolayca kolayca birden fazla iç içe rasgele / manuel üretim seviyesine sahip olabilir: örneğin, usule göre oluşturulmuş bir dünya, elle çizilmiş bir tasarıma sahip, usule göre üretilmiş ağaçları el ile tasarlanmış yaprakları içeren usule göre üretilmiş odunlarla çevrili, elle oluşturulan bir kasabayı içerebilir.
Ayrıca, yordamsal içerik oluşturmanın sabit bir dünya ile mutlaka uyumlu olmadığına dikkat edin: sabit bir RNG tohumu seçebilir ve dünyanızı oluşturmak için kullanabilirsiniz. Eğer oyuncuların keşfetmesi için muazzam bir dünya istiyorsanız, ancak her oyun ve her oyuncu için aynı kalmasını istiyorsanız, bu faydalı olabilir.
Bunu yaparsanız (veya yapmasanız bile), dünya genel üreticinizi hiyerarşik bir şekilde çalışacak şekilde tasarlamalısınız, örneğin, genel harita üreticisinin tek bir RNG örneği tutacağı şekilde, birden fazla RNG örneği kullanarak alt bölgeleri oluşturmak için kullanacağını, her alt bölgeye bölge üreticisinin daha sonra bölgeyi oluşturmak için kullanacağı ayrı bir RNG örneğini tohumlamak için kullanacağı farklı bir tohum değeri atayarak kullanacağını söyledi. Bu, haritanın en küçük kısmının en küçük ayrıntılarının bile değiştirilmesinin RNG'yi senkronizasyondan çıkarabileceği ve dünyadaki diğer her şeyin tamamen farklı olmasına neden olabileceği "kelebek etkisinden" kaçınmaktır.
Kelebek etkisinden kaçınmanın bir diğer önemli yolu, özellikle de oyuncu araştırdığı sırada dünyayı “hareket halindeyken” yaratıyorsanız, normal RNG'lerden tamamen kaçınmaktır (üretme gibi, oyuncunun bakış açısından "anında" gerçekleşen işlemler hariç) oyuncu girdiğinde yeni bir seviye) ve bunun yerine herhangi bir dahili durumu saklamayan rasgele sayı üretme yöntemlerini kullanın. Örneğin, bir alt bölge için tohumu seçerken oyuncu girmek üzeredir, genel dünya jeneratörü alt bölgenin (ve kendi genel tohumunun) koordinatlarını alabilir ve bunları alt bölge tohumunu üretmek için bir karma fonksiyonuna besleyebilir . Bu şekilde, her bölge, oyuncunun girdiği sıradan bağımsız olarak her zaman aynı görünür.
Ps. Tüm bu sıkıntılardan sonra, yordam oluşturmada kullanılan gerçek kodla ilgili son sorunuza kısaca değineyim. Ne yazık ki, sağladığınızdan çok daha fazla ayrıntıya sahip olmadan, anlamlı bir anlamda gerçekten cevap verebileceğini sanmıyorum, çünkü tam anlamıyla dünyayı yaratmanın usule uygun olarak bunları kullandığı oyunlar olduğu kadar farklı yöntemler de var.
Örneğin, tüm procedurally üretilen keşif oyunların büyük bir grand-baba muhtemelen Rogue olan seviye nesil algoritması sadece rastgele daha büyük bir dikdörtgen düzey içindeki dikdörtgen odalardan bir demet yerleştirerek ve geçitler olanlarda bağlantılı odalar (ve bir merdiven yerleştirerek oluşuyordu, bunlardan birinde bir sonraki seviye). Onun çeşitli ardılları gelen Nethack için Diablo serisi, birçok yönden bu sistemde oluşturulmamıştır var, ama en az ya da çok rastgele bir ızgara harita üzerinde yerleştirilmiş odalar, zindanlarda ve labirentine oluşan farklı seviyelerinden temel fikir korumuşlardır.
Tersine, açık dış mekan ayarlarına sahip oyunlar için muhtemelen bir çeşit fraktal arazi üretme algoritmasıyla başlamak ve bunun üzerine başka özellikler (nehirler, ormanlar, kasabalar, vb.) Oluşturmak isteyeceksiniz . Veya Minecraft'ın yaptığı gibi bir şey yapabilir ve peyzajınızın hangi kısımlarının sırasıyla toprak ve hava olduğunu belirleyen rastgele bir 3B prosedürel doku oluşturabilirsiniz (alt blokların topraklanma olasılığının daha yüksek olması için ölçeklendirilmiş ve önyargılı) ve ardından su gibi kaplamalar üstüne toprak / kaya, bitki örtüsü vb.
Elbette, yukarıdakilerden hiçbiri, bir uzay keşif oyunu yazmıyorsanız geçerli değildir , bu durumda, bir miktar yoğunluk işlevine göre rastgele yerleştirilmiş bir dizi yıldız sistemi oluşturmanız ve ardından bir rasgele oluşturma yapmanız gerekir. her birinde yıldızlar ve gezegenler kümesi. Ya da belki size oyuncularınızı Öklid olmayan bir manzara keşfetmeleri için zorluyorsunuz, bu durumda tamamen farklı bir dizi zorlukla karşı karşıya kalacaksınız (örneğin, belirli bir yarıçap içindeki hacmin polinomdan ziyade katlanarak büyümesi, büyük bir haritayı hafızada tutmak gerçekten zor).