Oyunum bir varlık bileşeni çerçevesi kullanıyor ve varlıkları tanımlamak için komut dosyaları kullanıyor (bu doğrudan davranışı tanımlamıyor, sonunda bunun hakkında daha fazla konuşacağım). Komut dosyaları, her bir varlığı oluşturmak için kullanılacak gerçek bileşenleri tanımlar. Oluşturduğum basit bir betik dili kullanıyor. İşte scriptlerimden birinin basitleştirilmiş bir versiyonu:
ENTITY:"Goblin"
{
description="It's currently their age."
commonname="goblin"
pluralCommonName="goblins"
childname="gob'in"
pluralChildName="gob'ins"
active=Nocturnal
tags=Mobile
baseAttributes="OrganicMobileCreature"
[Model]{
meshname="Goblin"
texturename="GoblinTexture"
}
[Motion]{
maxvelocity=0.01:0.015
locomotion=Walk,Swim
}
[Skills]{
ALL=0.01:0.05,Mine=8.3:8.8,PlaceCube=8.3:8.8
}
[Inventory]{
maxItems=2
Allow=ALL
Disallow=NONE
}
}
Bunların çoğu kendi kendini tanımlamaktadır, ancak işte bazı önemli noktalar:
- İlk bölümde işletme için ortak bilgiler açıklanmaktadır. Bu, varlığın çeşitli yönleri için bir açıklama ve görünen adları içerir.
baseAttributes
Ortak bileşenleri tanımlar başka komut dosyası istemiyorum bu etiket başvuruları birden çok kez yeniden tanımlamak zorunda. Gibi bileşenler içerir position
, liferequirements
vb. Burada tekrar herhangi bir bileşen tanımlanmışsa, bu bileşen ortak bileşenin üzerine yazacaktır.
- Her
[NAME] { }
set, bu varlıklara eklenecek yeni bir bileşen tanımlar.
- Bu açıklama yalnızca tek bir varlık için değil , oluşturulan tüm goblinler için de geçerlidir. Bazı değerlerin aralıklara sahip olduğunu göreceksiniz (yani
0.01:0.015
), yeni bir goblin oluşturulduğunda o aralıkta rastgele bir değere sahip bir bileşenle oluşturulur. Yani her cin biraz farklı becerilere ve biraz farklı hızlara sahip olacak. Bu kurulum, tüm goblinlerin küpleri ve madenciliği yerleştirmede gerçekten iyi becerilerle başlayacağını tanımlar, bu da sadece kendi test amacım içindir. Ama tahmin edebileceğiniz gibi, değerleri istediğim gibi değiştirmek çok kolay.
Tüm bunlar, özel bir ayrıştırıcı, varlık tanımlarını (benim Lexicon olarak adlandırıyorum!) Tutmak için bir tür yapı ve bu varlık tanımlarını almak ve yeni varlıklar oluşturmak için bir fabrika oluşturmayı içerir. Benim için bu sistem hala ilk aşamalarında, ama gerçekten, gerçekten iyi çıkıyor. Varlıkları hızlı bir şekilde tanımlamak için oldukça güçlü bir sistemdir ve oluşturduğunuz bileşenleri kullanarak istediğiniz varlıkları oluşturmanıza olanak tanır. Kendi ayrıştırıcıyı oluşturmakta rahat değilseniz, XML'in iyi çalışacağını düşünüyorum. Madeni, küçük bir programlama dili için yazdığım bir geri dönüş özyinelemeli ayrıştırıcıdan dönüştürdüm.
Gördüğünüz gibi bu, varlığı tanımlar. Doğrudan davranışı tanımlamadığından bahsettim. Bununla birlikte, nefret edilen düşmanlar ve söz konusu düşmanlara ne kadar agresif tepki vermeleri gibi şeyleri kolayca tanımlayabilir. Bu, bu tür bir davranışı kontrol etmek için kullandığınız bileşeni tanımlamak kadar basit olacaktır. Varlıklarımın ayrıca aşağıdakileri tanımlayan bir istihbarat bileşeni (gösterilmiyor) var:
- Yol bulma yolları (basit görüş açısı hareketi, basit A *, öngörülü A *, vb.)
- Ne kadar agresif / savunmacı. Varlıklar savunulacak ev bölgelerine sahip olabilir, ancak bu bölgelerin dışında agresif olmayabilir.
- Teknoloji bilinci (açık kapılar, alet kullanma, tuzaklardan kaçınma vb.)
- Ve dahası...
Sizinki nasıl tanımlanırsa tanımlansın, bu bileşendeki verileri yönlendirecek olan sistem, bu da girişlerinizin davranışını etkiler.