Geliştirici Günlüğü #1 - Başlangıç

Ö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. :) Geliştirici günlükleri adı üstünde günlükler ve bu uzun süreç boyunca gelen yüzlerce güncelleme ve değişiklikleri tek bir 'günlük'de söylemeyeceğim. Bu gelen güncellemeleri parça parça halinde sizlere daha kolay sindirebilmeniz için kendi görüşlerim ve sebeplerim de dahil olmak şartıyla sizlerle paylaşacağım. Bu daha sadece başlangıç! Bazen bir gün içinde birden fazla da güncelleme günlüğü atabilirim. Fırsat buldukça sizlerle çalıştığım sistemler hakkında forumumuz üzerinden fikirlerinizi almak ve okumak isterim. Gelecek güncelleme günlüklerimi ayrıca elimden geldiğinde teknik jargon kullanmayarak en basit haliyle sizlere anlatmaya çalışacağım. Güncelleme günlüklerini elimden geldiği kadarıyla sık olarak atmaya çalışacağım. Sırf bir kaç gün konuşmadım veya sizlere bilgi vermedim diye kötü bir şey olacağını sakın düşünmeyin çünkü bazen bir sistem üzerinde çalışırken günlerce kimseyle konuşmamam ve dikkatimi ve enerjimi güncelleme üzerine vermem gerekebilir. (TC takım üyelerine bu huyumu sorabilirsiniz...)

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:

etirps

New member
12 Haz 2021
1
1
1
eline sağlık kral en önlerden yerimizi alalım oyun içi güncellemeleri çok merak ediyorum özellikle oyun ömrünü uzatmak için yapılan çalışmaları
 
  • Like
Tepkiler: sulusid

arenas

New member
12 Haz 2021
2
1
3
oyunun teknik ve altyapısından hızından ıvır zıvırından daha çok oyun yapısını nasıl yaptığın önemli tabi bu söylediklerinde önemsiz demek değil bunlarda olmalı fakat açacağın oyun 3-4 ay sonrasında biterse senin de gömdüğün pvplerden farkın kalmaz ve metin2.tc nin bıraktığı izi silmiş olursun umarım metin2.tc gibi metin2 piyasasında iz bırakan bir files ile karşımıza çıkarsın kolay gelsin.
 
  • Like
Tepkiler: sulusid

GHOSTRIDER

New member
12 Haz 2021
3
1
3
Metin 2.5 Derken direk metin 3 olsaydı gerek görevleriyle gerek grafikleriyle bizi sürükleseydi :) Belkide öyle yapıyorsun
 
  • Like
Tepkiler: sulusid

c0c0

New member
18 Haz 2021
1
0
1
Yazının paylaşılma tarihi olarak sadece gün ve saat yazıyor bunu hangi cumartesi yazdın bilmiyorum bu forumun canlı olup olmadığını anlamamamız için kasıtlı olarak yapılmış birşeymi? Lütfen tam tarih belirtirmisiniz
 

Ssba04

New member
23 Haz 2021
1
0
1
Sabırsızlıkla bekliyoruz umarım ilk TC gibi güzel uzun soluklu olur. Sizden ricam yenilik yapacağız diye TC yi bozma ilk TC yi istiyor herkes eski TC . Bunun dışında oyunun ana yapısı bozulmadan yaratıcı şeyler yapılır sa iyi olur.