Kodların arasında sessizce duran Metin2 detayları

konuya daha önce bunu yazdım mı bilmiyorum ama oyuna sms sistemi eklemiş adamlar, bildiğin arkadaş listende ki adamın telefonuna sms atabiliyormuşsun oyun içi
 
Ymir'den ders niteliğinde muhteşem faydalı ve açıklayıcı bir yorum satırı kullanımı örneği

1763961335659.webp
 
Ymir'den ders niteliğinde muhteşem faydalı ve açıklayıcı bir yorum satırı kullanımı örneği

27048 eklentisini görüntüle
Projedeki dosya sayısı arttıkça modülerlik zorlaşıyor. Kafada tasarlamak o anki ruh haline göre yetersiz kalabiliyor. Yeni bir class, birkaç fonksiyon yazmaya kalkışırsın, yazarken de istemsizce önceden yazdığı kodu okursun ve bunların gereksiz olduğunu farkedebilirsin. Bunun yerine kabaca yorum satırı ile pseudo code gibi konuşma diliyle yazarsın. Mantıksız bir şey gözükmüyorsa yazmaya başlarsın. Tahminimce o arkadaş da böyle bir düşüncedeydi.
Bu adamlar bu oyunu hazır bir oyun motoru olmadan 2004 yılında geliştirmiş. Yapay zeka yok, en büyük eksik belki de. Kodların önemli bir kısmını da C kafasıyla yazmışlar. Yargılanabilecek kısımlar olabilir ama kesinlikle aptal yerine konmaları bana daha komik geliyor 😬
 
az önceki foto çok dandikti güneşi aşağı çektim bunu da açtım daha güzel duruyo sanki :D
1230_215048.webp
 
Herkesin genelde kaldırdığı Traffic Profiler sistemini denedim, aslında ilgi çekici raporlar veriyor, biraz geliştirilerek kullanışlı bir araç haline getirilebilir.

1768144887280.webp
 
World Editor'un neden 2014 mob_proto'yu okuyamadığını araştırırken ilginç bir detaya denk geldim.

Sorunun kaynağı eski WorldEditor'deki TMobTable ile 2014 istemcisindeki TMobTable yapılarının tamamen farklı olmasıydı.

WorldEditor tarafında dikkatimi çeken alan şu oldu:

C++:
Genişlet Daralt Kopyala
BYTE abLevelRange[2];

Yanındaki Korece yorum da:

C++:
Genişlet Daralt Kopyala
// Level 결정 범위: [0] ~ [1]

yani kabaca:

Kod:
Genişlet Daralt Kopyala
Level belirleme aralığı

anlamına geliyor.

İlginç olan kısım ise bunun sadece struct içinde bulunması değil.

WorldEditor'de doğrudan kullanılan fonksiyonlar mevcut:

C++:
Genişlet Daralt Kopyala
void CNonPlayerCharacterInfo::GetLevelRangeByVID(...)
{
*pbyLowLevelLimit = p->abLevelRange[0];
*pbyHighLevelLimit = p->abLevelRange[1];
}

ve

C++:
Genişlet Daralt Kopyala
void CNonPlayerCharacterInfo::GetLevelRangeByMapIndex(...)
{
*pbyLowLevelLimit = p->abLevelRange[0];
*pbyHighLevelLimit = p->abLevelRange[1];
}

Bu değerler editör açılırken bütün mob listesine şu formatta yazdırılıyor:

C++:
Genişlet Daralt Kopyala
"%d:%s(%02d~%02d):%d"

Örneğin editörde bir mob şu şekilde görüntülenebiliyordu:

Kod:
Genişlet Daralt Kopyala
2:Wild Dog(01~04):101

Aynı bilgi seçili bir spawn alanındaki yaratık gösterilirken de tekrar kullanılıyor.

Yani bu alan sadece struct içinde unutulmuş bir veri değil; editörün kullanıcı arayüzünde aktif olarak kullanılan bir özellik.

Daha da ilginci, 2014 istemcisinde bu sistem tamamen ortadan kalkmış durumda.

Eski yapı:

C++:
Genişlet Daralt Kopyala
BYTE abLevelRange[2];

2014:

C++:
Genişlet Daralt Kopyala
BYTE bLevel;

Yani iki byte'lık bir level aralığı yerine tek bir level değeri kullanılıyor.

Buradan kesin olarak söyleyebildiğimiz şeyler:

Eski WorldEditor moblar için tek level değil, bir level aralığı konsepti içeriyordu.
Bu aralık editör arayüzünde aktif olarak kullanılıyordu.
Daha sonraki sürümlerde bu sistem kaldırılmış ve tek level mantığına geçilmiş.

Asıl merak uyandıran kısım ise şu:

Bu sistem gerçekte ne için kullanılıyordu?

İlk akla gelen ihtimal, mobların belirli bir level aralığında spawn olabilmesiydi.

Örneğin:

Kod:
Genişlet Daralt Kopyala
Yabani Köpek
Level 1~4

olarak tanımlanıyor ve spawn olurken bu aralıktan bir level seçiliyor olabilirdi.

Fakat elimizdeki kodlar bunu henüz kanıtlamıyor.

Bunun doğrulanabilmesi için eski sunucu tarafındaki spawn veya mob oluşturma kodlarında abLevelRange kullanımını bulmak gerekiyor.

Bir başka ihtimal ise bunun gerçek bir gameplay sistemi değil, editöre yönelik bir metadata olması.

Örneğin mobun gerçek leveli sabit olsa bile:

Kod:
Genişlet Daralt Kopyala
Yabani Köpek (1~4)
Ork (15~20)

şeklinde harita tasarımcısına o yaratığın hedef oyuncu seviyesini göstermek için kullanılmış olabilir.

Fakat burada ilginç olan nokta şu:

Bu bilgi spawn alanlarından değil, doğrudan mob datasından geliyor.

Yani Ymir'in bir dönem yaratıkları yalnızca tek bir level değeriyle değil, bir level aralığıyla tanımlamayı düşündüğünü veya kullandığını söylemek çok da uzak bir ihtimal değil.

Belki hiçbir zaman tamamlanmamış bir sistemdi.

Belki oyunun çok eski sürümlerinde gerçekten kullanıldı.

Belki de 2014'e kadar gelen süreçte tamamen terk edilip tek level mantığına geçildi.

Kodların arasında sessizce kalmış ilginç detaylardan biri daha.
 
Geri
Üst