Daha önceki bölümde de bahsedildiği üzere Mod sistemiyle şu şekilde çalışıyorduk :
1 ) Önce bir veya daha çok mod dosyasını ( başlangıcı module_ ve uzantısı .py olan dosyalar) düzenleyip istediğiniz değişiklikleri yapıyorsunuz. (Sağ tuşa tıklayıp açılan menüden "Edit with IDLE" seçeneğini seçerek )
2 ) Bundan sonra build_module.bat dosyasını çift tıklayıp çalıştırıyorsunuz. Bu modunuzu sizin için kuracak ve herhangi bir hata olursa size bildirecek.
3 ) Eğer hiç hata çıkmazsa Mount&Blade'i açıp yaptığınız değişiklikleri test edebilirsiniz. Bazen yaptığınız değişikliklerin etkin olabilmesi için yeni bir oyuna başlamanız gerekebilir.
2.1 Mod Dosyalarını Düzenlemek
Modül sisteminde oyundaki nesne toplulukları Python listeleriyle temsil edilmekte. (Bir python listesi '[' ile başlarken virgülle ayrılmış nesnelerle devam eder ve ']' ile biter) eğer herhangi bir modül dosyasını açarsanız onun da böyle bir liste kullandığını görürsünüz mesala module_map_icons.py dosyasının içeriği :
map_icons = [
("player",0,"player", 0.2, snd_footstep_grass),
("player_horseman",0,"player_horseman", 0.2, snd_gallop),
("gray_knight",0,"knight_a", 0.2, snd_gallop),
("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
("khergit",0,"khergit_horseman", 0.2,snd_gallop),
("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
("woman",0,"woman_a", 0.2,snd_footstep_grass),
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]
Burada map_icons değişkeni bir python listesi ve listenin içindeki her öğe de özel bir harita simge (map icon) nesnesi olarak olarak tanımlanmış. Bu örnekte ("player",0,"player", 0.2, snd_footstep_grass) de böyle bir nesne. Bu nesnelere Python dilinde tuple denilmekte. Tuplelarda listeler gibi virgülle ayrılmış nesnelerden oluşurken listelerden farklı olarak parantezlerle tanımlanırlar. Her bir tuple nesnesinin yapısı modül dosyası başlangıcında açıklanmıştır. Harita simgeleri (map icon) için her tuple nesnesi şunları içerir :
1 ) simgenin adı
2 ) simge flagı
3 ) Mesh'in adı
4 ) Mesh'in ölçeği
5 ) Ses kimliği
(ç.n. Yukarıda gördükleriniz module_map_icons.py dosyasının "#" ile başlayan python dökümantasyon kısmı ve dosyanın
orjinalinde ingilizce geçmekte haliye, bu arada "#" Python'da dökümantasyon amacıyla kullanılır)
Yani ilk tuple ("player",0,"player", 0.2, snd_footstep_grass) için :
1 ) simgenin adı = "player"
2 ) simge flagı = 0
3 ) Mesh'in adı = "player"
4 ) Mesh'in ölçeği = 0.2
5 ) Ses kimliği = snd_footstep_grass
Her modül sistemi dosyasının başındaki dökümasyonda listelenen açıklamalarla python listelerindeki öğeleri eşleyerek oyun nesnelerinin yapısıyla bu şekilde oynayabilirsiniz.
2.2 Oyuna Yeni Nesneler Eklemek
Harita simgesi (map icon) tuplelarının yapısını öğrendiğimize göre artık yeni harita simgeleri ekleyebiliriz. Listeye tekrar dönersek :
map_icons = [
("player",0,"player", 0.2, snd_footstep_grass),
("player_horseman",0,"player_horseman", 0.2, snd_gallop),
("gray_knight",0,"knight_a", 0.2, snd_gallop),
("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
("khergit",0,"khergit_horseman", 0.2,snd_gallop),
("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
("woman",0,"woman_a", 0.2,snd_footstep_grass),
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]
Her modül dosyasındaki yeni oyun nesneleri listelerin içine eklenmelidir. Gördüğünüz gibi module_map_icons listesi ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass) ile bitmekte.Yeni oyun nesnesine yer açabilmek için köşeli ayracı (']') bir satır aşağı kaydırmamız gerekecek.
Bunu yaptıktan sonra yeni oyun nesnesimizi ekleyebiliriz.Bunun en kolay yolu hazır nesneleri kopyalayıp yapıştırdakdan sonra içeriklerini düzenlemekten geçer. Örneğin :
map_icons = [
("player",0,"player", 0.2, snd_footstep_grass),
("player_horseman",0,"player_horseman", 0.2, snd_gallop),
("gray_knight",0,"knight_a", 0.2, snd_gallop),
("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
("khergit",0,"khergit_horseman", 0.2,snd_gallop),
("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
("woman",0,"woman_a", 0.2,snd_footstep_grass),
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
("new_icon",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]
Bu örnekte ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass) nesnesini tamamen kopyalayıp ona yeni bir isim verdik; "new_icon". Bu yeni simgemiz bir flaga sahiptir. Flaglar uygun alanlara eklenip çıkarılarak, açık ve kapalı olarak iki halde gelen ayarlardır. Örneğin mcn_no_shadow flagı yeni simgemizin yerde gölge oluşturmasını engelleyecektir.
mcn_no_shadow flagını 0 ile değiştirerek modül sistemine burada herhangi bir flag olmadığını belirtelim.
map_icons = [
("player",0,"player", 0.2, snd_footstep_grass),
("player_horseman",0,"player_horseman", 0.2, snd_gallop),
("gray_knight",0,"knight_a", 0.2, snd_gallop),
("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
("khergit",0,"khergit_horseman", 0.2,snd_gallop),
("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
("woman",0,"woman_a", 0.2,snd_footstep_grass),
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
("new_icon",0,"City", 0.9,snd_footstep_grass),
]
Hem "town hem de "new_icon" simgeleri "City" meshini kullanmaktadırlar. Bu da her ikisinin de oyunun kaynak dosyalarından "City" 3d modelini kullandıklarını gösterir. Bu alan değiştirilerek kaynak dosyalarından herhangi bir 3d model kullanılabilir.
Her iki simge de aynı Mesh'i kullandıklarından şu anda oyuna "new_icon" simgesi koymaya kalksaydık, "town" simgesiyle aynı görüntüye sahip olacaktı.
Şimdi "new_icon" simgesinin görünümü biraz değiştirmeye çalışalım:
map_icons = [
("player",0,"player", 0.2, snd_footstep_grass),
("player_horseman",0,"player_horseman", 0.2, snd_gallop),
("gray_knight",0,"knight_a", 0.2, snd_gallop),
("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
("khergit",0,"khergit_horseman", 0.2,snd_gallop),
("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
("woman",0,"woman_a", 0.2,snd_footstep_grass),
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
("new_icon",0,"City", 5.0,snd_footstep_grass),
]
Bu örnekte simgenin ölçeğini 0,9'dan 5.0'a değiştirdik. Bu yeni simgemizin normalden beş kat daha büyük görünmesine neden olmakla beraber simgemizi oyuna dahil ettiğimizde onu "town" simgesinden ayırmamızı sağlar.
Bir sonraki bölümde module_parties.py dosyasına yeni simgemizi kullanan bir parti ekleyeceğiz. Bunun için module_parties.py dosyasından simgeyi referans etmemiz gerekecek.