Önsöz:
Merhabalar Metin2 TC ailesi,
Sizlere çok uzun bir manifesto yazacağımı söylemiştim fakat, manifestoya hareketli resim, video ve diğer dinamik elementleri ekleyemeyeceğim için ve ayrıca sizlerin de yorum yapamayacağınız için direkt olarak forumumuzu aktive edip, manifestoyu parçalayıp, teker teker günlükleri paylaşma kararı aldım. Ek olarak günlüklerin altına yorum yazabilir veya forumumuzdaki soru cevap kısmından da şahsıma ve takımıma dilediğiniz soruları sorup diğer oyuncularla etkileşime geçebilirsiniz.
Sizlere bir hafta öncesinden söz verdiğim üzere ilk geliştirici günlüğüne hoşgeldiniz.
Bildiğiniz üzere TC'nin en son açılışında market sisteminde yaşanan sorunlar ve bazı sinir bozucu irili ufaklı sorunların olması ve tam zamanında bunların çözülememesi, tam olarak sizin istediğiniz kalitede bir oyun deneyimi yaşatamadığımız için, hatalarımızdan da ders alarak Metin2 TC 10.0 sürümünü yapmaya karar verdim.
Şu an piyasada bulunan oyunlar tam olarak para tuzağı olması, kopyala yapıştır birbirinin aynısı oyunlar, amatörce yapılmış oyun/mekanik dizaynları olduğundan dolayı herkesin TC kalitesini ne kadar istediğini ve beklediğinin farkındayız ve elimizden gelenin en iyisini yapmaya çalışıyoruz.
Bizim kapalı kaldığımız süreç boyunca bizim adımıza oyun açtığını iddaa eden tayfaya veya bizim adımız üzerinden prim yapmaya çalışan kişilere ve gruplara kesinlikle itibar etmeyiniz, TC'nin bir tek websitesi bulunmakta ve bir tek adı ve de bir tek sahibi bulunmaktadır, bu kişi de benim.
Takımım da dahil olmak üzere insanlar bana aylarca sürekli olarak: 'Alihan bu fırsatı değerlendir.', 'Şu zaman açalım, pandemi olduğundan dolayı oyuncu kitlesi büyük olur.' tarzında tavsiyelerde bulundunuz. Fakat hiç birini plana koymadım. Peki neden? Neden bu inanılmaz fırsatları değerlendirip TC'yi hemen açmadım. Bunun tek bir sebebi var, sevgili oyuncular bazı insanlar bu işleri para için yapar, bazı insanların ana gelir kapısı bu iştir, bu iş olduğu vakit bu şekilde fırsatları çok iyi değerlendirip oyun açar, para kazanır. Benim birincil para kaynağım asla TC olmadı ve bu şekilde bir para kaynağına da mesleğimden dolayı ihtiyacım da olmadı. Kendim Birleşik Krallık'da yaşayan bir yazılım mühendisi olarak TC adlı projeme hep kişisel bir hobi olarak baktım ama ayrıca bu projede yaptığım işleri de bir şirkete çalışan kontratlı yazılım mühendisi ciddiyetiyle yaptım. Bazı insanlar bir başkalarından aldığı övgüyü sevdiği için ve farklılık yaratmak için böyle şeyleri yaparlar, ben de bu insanlardan biriyim. Bazı insanlar bir şeyleri üretmek için yaşar, üretmeden, tasarım yapmadan, düşünmeden edemez, ben de bu insanlardan birisiyim. Hem TC dolayısı ile kendi tecrübeme tecrübe katıyorum hem de bir şeyler üreterek sevdiğim, gönül verdiğim işi yapıyorum, bundan başka beni ne mutlu edebilir ki? Pandemi dolayısı ile Londra'daki kontratını imzaladığım ve full time çalışacağım bir Amerikan yazılım şirketindeki pozisyonumu kaybetmem dolayısı ile ve pandemi sürecinde boş kalmamak için TC'nin sıfırdan yeni sürümünü yapmaya karar verdim. TC'nin yepyeni sürümü üzerinde sıfırdan başlayarak yaklaşık 7-8 aydan beri aralıksız olarak geliştirmekteyim. Biraz sonra aşağıda okuyacağınız detaylarda göreceğiniz üzere, oyunun orijinal yapımcıları bile bu geliştirmeleri yapamamaktayken, ben bu geliştirmeleri yazdım. Görünüşe göre oyunun yapımcıları dahil bu geliştirmeleri yapmaktan çekiniyorlar veya bu geliştirmeleri yapmanın çok zor ve çok meşakatli olacağından dolayı oyuna sürekli yenilik getirip ek olarak para kazanmaya devam ediyorlar. Fakat bu durum benim için kesinlikle geçerli değil, yaptığım bu proje benim için tamamen bir zevk işi ve kendimi kanıtlama durumu olduğu için TC'nin mevcut sürümü 10.0'ı Metin2.5 olarak tanımlayabiliriz.
Günlük #1
Google Protocol Buffers (Protobuf) / Flatbuffers
Metin2 tarihinde bir ilk olarak sunucu ve istemci dahil tüm ağ altyapısını tamamıyle Google Protocol Buffers'a geçirdim. Bu işlem ile Metin2'nin 450 den fazla ağ paketlerini teker teker refaktörize edip sıfırdan yazdım. Peki protocol buffers tam olarak nedir? Protocol Buffers Google tarafından üretilmiş bir ağ protokolü oluşturma ve yönetme kütüphanesidir ve ayrıca Google’ın kendi içindeki veri iletişiminde de bolca kullandığı bir veri transfer protokolüdür. Bu kütüphane/protokolü CS:GO, League of Legends, GTA V gibi AAA+ oyunlar ve yapımcısı olan şirketler kullanmaktadır. Metin2 altyapısı 20 senelik bir altyapı olduğu için o zamanlarda tabii ki bu protokol yoktu, herkes manuel olarak paket protokolü yazıyordu. Fakat modern zamanlarda bu işler tamamen değiştiği için değişime ayak uydurmak gerekiyor.
Protokoller / Paketler ne hakkında konuşuyorsun? Protokoller (TCP/UDP) aracılığı ile sunucu ile siz oyuncular arasında bir tünel bağlantısı oluşturulur, bu tünel bağlantısı içinde örneğin oyunda yazacağınız bir chat istemci (client) tarafından 'encode' (şifrelenir/sıkıştırılır) edilir ve ardından sunucuya protokolünüze bağlı olarak 'paket' gönderilir. Ardından sunucu bu paketi 'decode' (deşifre) ederek sizin tam olarak oyunda ne yapmaya çalıştığınızı anlar. Bu paketler eski 20 yıllık Metin2 altyapısında manuel olarak el ile yazılmış ve statik ve dinamik paketlerin yazılması veya yönetilmesi çok meşakatli iş ve en küçük yaptığınız hatada komple sunucuyu elinize almanız hiç kaçınılmaz değil. Google Protobuf ile Metin2 TC'ye özel olarak bir bağlantı protokolü oluşturduk. Bu kendi özel protokollerimiz sayesinde altyapıda var olan paket (örneğin, rasgele olarak oyundan atma gibi) sorunlarının TAMAMINI düzeltmiş ve gelecekte ekleyeceğimiz sistemlerde oluşabilecek herhangi bir sorunu da tamamen çözmüş olduk ve olmasını da engelledik.
Protobuf'ın özellikleri sadece işimizi kolaylaştırmakla, oluşabilecek sorunları da engellemekle de kalmıyor ek olarak siz ve sunucu arasında oluşacak olan paket trafiğini de sıkıştırıyor ve sunucudan gelecek paketleri ek olarak opsiyonlayabiliyor, örneğin eski sistemin bir paketinde karakter oyuna girdiği zaman fix olarak 24 (24 byte) karakterlik bir paket gönderiyor istemciye, Protobuf ile karakter adının uzunluğu ne kadarsa o kadar büyüklükte 'delimited' (parçalı) dinamik bir paket gönderiyor. Bu şekilde sunucu ve istemci arasındaki trafik çok önemli ölçüde azalmış oluyor, performans genel olarak artıyor ve daha keyifli oyununuzu oynamanıza olanak sağlıyor. Başka bir örnek olarak eski sistemde bir adet itemin envanterinize sunucu tarafından gönderildiğini düşünün, bunu da bir adet artı basma itemi olarak düşünelim, artı basma itemlerinde efsun, taş olmamasına rağmen sunucu yine bu paketleri size gönderiyor, buna bağlı olarak gereksiz trafik haliyle çok fazla oluyor. Yeni altyapımızda Google'ın teknolojisi sayesinde bu artı basma itemi envanterinize geldiğinde sadece boş bir item datası otomatik olarak gönderilecek. Eğer bu envanterinize gelen itemin efsunu varsa efsunları teker teker, taşları varsa yine teker teker spesifik, seçilmiş olarak gönderilecek.
Yeni Refaktörize Edilmiş / Modernleştirilmiş Kaynak Kodları
Metin2 bahsettiğim üzere 20 yıl önce yazılmış bir oyun olduğu için, şuanki mevcut yazılım güncellemelerinden faydalanamıyorduk. Şimdi düşünün 20 yıl önce Nokia 3310 telefon kullanıyorduk ama bugün sadece ekranı 2K olan, 4 çekirdekli bir iPhone kullanıyoruz. Bundan 40-45 yıl önce Nokia 3310'in işlemcisi gücünde bir işlemciye sahip olan uzay aracı ile insanlık Aya ayak bastı. (Apollo Roketi yazılımı C ve işlemcisi) Hal böyle olunca yapımına başlanan Metin2, 2000'lerde, o zamanın 'son sürüm' olarak nitelendirdiği yazılım dili ve yazılım dilinin özellikleri ile 512mb RAM'in 8gb ram gibi olduğu dönemlerde bu oyunu yazdı... Fakat artık 20 sene önce o zamanın güncellemeriyle ve özellikleriyle yazılmış bir sistemin (C/C++) mevcut modern işlemcilerde ve grafik kartlarında kullanmak bile ayrı bir meşakat, ayrı bir zulüm çünkü 20 sene içinde C++'ye (Metin2'nin çoğu kısımlarının yazıldığı yazılım dili) on binlerce özellikler geldi ve yüzlerce güncelleme ve revizyon aldı.
Metin2 TC'nin altyapısının tamamını kendim C++20 ISO standartlarına göre tekrardan yazdım, standarda uymayan tüm daha önceden yazılmış sistem altyapılarını standarda uygun olarak revize ettim. Bu işlem testler ile beraber yaklaşık olarak 1,5-2 ay kadar sürdü, fakat şu an TC'nin altyapısı günümüz şartlarının teknolojilerini ve yazılım dilinin özelliklerinin ve potansiyellerinin tamamını kullanıyor.
Ayrıca Metin2 TC sunucu çekirdek sistemleri yine Metin2 tarihinde bir ilk olarak 6 ay önce 64 bit mimarisine geçirdim. 20 sene önce 64 bit yeni yeni çıkan bir işlemci mimarisi olduğu için tabii ki de Metin2 32 bit mimarisi için özel olarak yazılmıştı, fakat günümüz modern şartlarında 64 bit desteklemeyen işlemci kalmadığı ve işlemcilerin bile artık doğal olarak 64 bit mimarisine uygun şekilde üretildiği için, 32 bit olan bir yazılım 64 bit mimarisi olan bir sistemde ister istemez %10 kadar bir performans düşüşü yaşıyordu, artık Metin2 sunucu çekirdek sistemlerinin tümü doğal (native) olarak 64 bit işlemci mimarisine özel olarak çalışıyor ve gelecekte kullanacağımız aşırı güçlü sunucularımızın performansının tümünü etkin olarak kullanabileceğiz.
Neden? 'Alihan, hemen eski dosyalar ile TC'yi tekrardan aç!'
Üstte de bahsettiğim üzere TC projem benim için aç kapattan çok, becerilerimi kanıtlama, kendimi geliştirme ve bu işten büyük ölçüde zevk almam olduğu için bu kadar en ufak detaylarına kadar çalışma yapıyorum ve kesinlikle kopyala yapıştır, aç kapat mentalitesine girmedim ve girmeyeceğim de... Benim için projemde yer almamayı tercih edebilirsiniz, yine saygı duyarım ama sadece eleştiri yaparken saygılı olarak eleştiri yapmanızı rica ediyorum, sonuçta siz oyunda emek verip zevk alıyorsanız, ben de tam olarak mühendisliğinden, kodlamasından, oyunu tasarlamaktan bu şekilde zevk almaktayım.
Kapanış
'Bir dakika! Üzerinden aylar geçti ve söyleyeceklerin bu kadar mı? Hani oyun hakkında bilgiler?'
Dur öncelikle sakin ol.
Zaman ayırıp okuduğunuz için teşekkür ederim, gelecek güncelleme günlüğünde oyun içindeki mekaniklere geçiş yapacağız.
Son düzenleme: