Quake II Rerelease Game Source - Quake II 2023 yeniden sürümü için oyun kodu
(github.com/id-Software)- Quake II 2023 yeniden sürümünün oyun kodunu ve başvuru amaçlı özgün oyun kodunu içeren, kullanıcıların oyuna mod eklemesini mümkün kılan kaynak kod
- Modlar, özgün oyundakiyle aynı şekilde yeniden sürüme yüklenebilir; başlatırken
+set game mymodkullanılabilir veya çalışma sırasında konsoldagame mymodgirilebilir - Özgün oyun dosyalarını değiştirmekten kaçınmak için modların
%USERPROFILE%\Saved Games\Nightdive Studios\Quake IIdizinine kurulması önerilir - Yeniden sürüm, sunucu ile oyun modülleri arasındaki iletişim için yeni bir API kullanır ve mevcutta sabit kodlanmış istemci davranışını değiştirebilmek için Quake III Arena'nın
cgamemodülüne benzer ince bir istemci oyun modülü sunar - Kod tabanı, özgün oyunun
baseq2,ctf,rogue,xatrixoyun modüllerinin birleştirilmiş halidir ve C++17 derleyicisi gerektirir - Derleme yalnızca Clang, VS2019 ve VS2022 üzerinde test edilmiştir; hem C++17 hem de C++20 ile derlenebilir ve C++20 kullanıldığında
fmtlibbağımlılığı atlanabilir - Bağımlılıklar fmtlib ve jsoncpp'dir;
vcpkg install jsoncpp:x64-windows fmt:x64-windowsile kurulabilir - Yeniden sürüm DLL'i, özgün ek paket haritalarını doğru yükleyemeyebilir; bunun nedeni, çakışan
spawnflagssorununu çözmek için bazı haritaların değiştirilmiş olmasıdır - Mevcut modlar, oyun export arayüzündeki değişikliklere uyacak şekilde taşınabilir olabilir; ancak tüm ek paketleri tek bir kod tabanında desteklemek ve yeni özellikleri yansıtmak için yapı ve yerleşimde büyük değişiklikler yapıldığından, yeni kod tabanı kullanılırken yeniden yazım gerekebilir
- Oyun DLL'i içindeki mantık, özgün motorun 10hz yerine 40hz tickrate için ayarlanmıştır; 25ms'lik adımlar ile bant genişliği ve CPU maliyetleri arasında denge kurulduğu için 40hz seçilmiştir
- Kayıt sistemi, işaretçi ofsetleri ve bellek kopyalama yerine seviye ve oyun verilerini UTF-8 JSON olarak yazar; artık kayıt sistemi dosya sistemiyle doğrudan arayüz kurmaz
- Quake II yeniden sürümü, version 2023 sunucu protokolünü kullanır; mesajların çoğu geriye dönük uyumludur, ancak yeni özellikler, değişen işlevler ve yükseltilmiş sınırlar için bazı ayarlamalar yapılmıştır
- id Software bu sürüm için destek sağlayamaz ve topluluk odaklı kaynakların kullanılması önerilir
1 yorum
Hacker News yorumları
Quake II, benim ilk kez C yazma deneyimimdi.
Kod açık, tutarlı ve dümdüzdü; bugüne kadar okuduğum en iyi kaynak kod olduğunu söylemem ama çıtayı yükseltmişti. Sonrasında çeşitli oyun kaynak kodlarında ekranın sağ tarafını aşan iç içe geçmiş yapılar, çok sayıda işi yapan devasa fonksiyonlar gibi tuhaf kodlar gördüm; bu da basit kodla da harika işler yapılabileceğine dair erken bir ders oldu.
1990'ların sonu ile 2000'lerin başında Quake ve Quake II ile çocuklara VR dersleri veriyordum. VR başlıkları, Q.E.D. ya da Qoole kurulu birkaç PC koyup 12-14 veya 14-18 yaşındaki öğrencilere kendi sanal gerçeklik oyunlarını yaptırıyordum.
Aslında yaptıkları, canavarların ya da silahların olmadığı Quake/Quake II seviyeleri oluşturmaktı; seviyedeki tetikleyicilerle ekranda mesajlar gösterip hikâye anlatıyorlardı. Bir ekip, slime'ın üzerinden geçilen ve bir düğmeyle pompayı çalıştırıp slime'ı boşaltan bir seviye yaptı; başka bir ekip ise uzayda asılı duran, içinden yüzerek geçilen 3D bir su labirenti yaptı. Hâlâ öğrencilerin yaptığı bazı seviyeler hard diskimde duruyor ama bazıları düzgün çalışmıyor.
Ders için blaster yerine işaret fişeği tabancası veren bir mod yapmıştım. Temelde blaster'dı ama ses efekti farklıydı, silah modeli yoktu; mermiler yerçekiminden etkileniyor, sekip duruyor ve belli bir süre sonra sönüyordu. O dersteyseniz başlığı denememiş olabilirsiniz; çünkü her zaman düzgün çalışmıyordu.
Fonksiyon içi yorumlar nispeten seyrek, 3D grafik konusunda güçlü bir anlayışınız yoksa kafa karıştıran şifreli ifadeler de sıkça çıkıyor. Carmack gibi sektörün öncülerinden birinin ürünü olduğu için bu doğal; ama kendinden emin şekilde takip edebilmek için çok fazla ön bilgi ve bir ölçüde matematiksel yatkınlık gerekiyor.
Eskiden kronik biçimde makarna kod yazardım; 25 satırlık bir kod parçası bir düzine özelliğin iskeleti olur, onun üstüne bir düzine şey daha binerdi. Çalışması inanılmaz hızlıydı ama teknik borç hızla birikiyordu; sonunda o fonksiyonlara dokunmak, üstüne yığılmış pek çok şeyi bozma riski yüzünden imkânsız hale geliyordu.
Yorumlarla açıklamaya çalıştım ama iletişim iyi değildi; fonksiyonun ne yaptığını yazıyor, nasıl çalıştığını yazmıyordum. “SINE tablosu işleme”, “tablo parçalarını birleştirme”, “ikili yorumlama” gibi şeylerdi. Herkes “Bu da ne böyle? Ama acayip hızlı” diyordu; video oyunları dışında bir alanda olsaydı sanırım ne ben ne de ürün uzun süre dayanırdı.
Başarılı, eğlenceli ve yeterince kararlı oyunların perde arkasında tam bir felaket gibi kodlarla piyasaya çıkmış olması şaşırtıcıydı. Böyle gelişigüzel yamalanmış bir çöp bile yeterince kâr edebiliyorsa, karmaşayı önlemek için harcadığım çaba ve zamanı bazen sorguluyorum.
Şu kısımda güldüm: https://github.com/ESWAT/john-carmack-plan-archive/blob/mast...
John Carmack'in 31 Ocak 1997 tarihli .plan'ında, yeni bir F355'i “makul” bir araba olarak almak için Ferrari bayisine gidip, girişte duran F40'ı görünce sonunda onu satın aldığını anlatıyor. Sonrasında Ferrari'leri fazla çoğaldığı için ilk Ferrari'sini Quake turnuvası ödülü olarak vermeyi planladığını da yazmış.
Ödül, 1987 model 328 GTS turboşarjlı modeldi; Ocak 1994'te Turbo dergisinde yer almış, şasi dinamometresinde arka tekerleklerde 360 beygir üretmiş, yeni motor ve yeni boya yapılmıştı ama iç mekânda elden geçirilmesi gereken yerler olduğu söyleniyordu. Vergi ve sigortayı karşılaması için nakit de vermeyi düşünmüş.
Quake II ile ilgili bir anımı bırakayım: baştan sona bitirdiğim ilk birinci şahıs nişancı oyunu Quake II'ydi.
Yazın başka bir eyalette yaşayan bir arkadaşımı ziyaret ettiğimde bir hafta boyunca oynamıştım; yoksa bana asla izin verilmeyeceğini düşünüyorum. Başlarken daha önce sadece DOOM oynadığım için aynı kontrol düzenini kullandım; şaşırtıcı biçimde işe yaradı ve fazla düşünmeden ilerledim.
Sonra birden bakışım tavana kilitlendi ve tamamen afalladım; meğer fareye dokunmuşum. Bir süre kurcaladıktan sonra fareyle bakış kontrolü kavramını fark ettim. Ondan sonra oyun çok daha kolaylaştı.
İnternet yoktu; ne ben ne arkadaşım fareyle bakış kontrolünü biliyorduk, gerçek 3D FPS oynayan birini de hiç görmemiştik. Artık bilgi o kadar yaygın ki, o dönemin oyun arayüzlerinin ne kadar yabancı ve uzaylı gibi hissettirdiğini hayal etmek zor. Kaynak kodun yayımlanmasına sevindim.
[0]: https://github.com/id-Software/Quake-2
[1]: https://github.com/id-Software
1999 civarı Roma, İtalya'daki ComicCon'daydım; Half-Life'ın gold master aşamasına yeni girdiği ve çok oyunculu demosunun yayımlandığı dönemdi. En az 20 kişi hep birlikte LAN çok oyunculu Half-Life oynuyordu ve fare de kullanıyorlardı. Delice bir manzaraydı.
Sonrasında 2005'e kadar sayısız LAN partisine gittim ama çevrim içi eşleştirme QuakeNet'i ve sosyalleşme kültürünü öldürdü.
Ah, ne nostalji
1999’da Quake II oynadığım oyundu; kelimenin tam anlamıyla neredeyse tek oyunumdu. QII’ye inanılmaz zaman harcadım ve ilk kodumu mod geliştirme yaparak yazdım
Quake II’nin beni bilgisayar kullanıcısından programcıya dönüştürdüğünü söylemek abartı olmaz. Yetişkinlikten sonraki hayatımın ve kariyerimin yönünü belirledi
İlk modumu yaparken vektör hesaplarını, mevcut bir kod tabanını anlamayı ve hızlı test için otomatik build entegrasyonunu öğrendim. Harita yapımı ve 3D art tarafına da biraz dokundum ama kısa süre sonra artist ya da tasarımcı olmadığımı fark ettim
O zamanlar hiç sürüm kontrolü ve yedekleme politikam olmadığı için özgün kodların tamamını kaybettim. Sonra benzer şekilde içine düştüğüm oyun Tribes 2 oldu; orada mümkün olan scripting ve modding gerçekten harikaydı
https://xn0.co/Xeno-Mod_1.9_Setup.exe
HN’deki herkes elbette internette rastgele bir kaynaktan çalıştırılabilir dosya indirip çalıştırır! Yine de orijinal QII’niz varsa ve merak ediyorsanız çalıştırmanız güvenli
Saygı duruşu: http://guake-project.org/
Müthiş; beni doğrudan 90’lara götürdü. Daha doğrusu ilk Quake’ten bahsediyorum
Yatak odamın zemininde sanırım Pentium 166MMX olan bir PC vardı; bir arkadaşım da yaklaşık 233 gibi biraz daha hızlı, benzer bir makine getirmişti. LAN kartı yoktu
Babamın eski paralel kablosunu kullanarak Windows’u bunun bir LAN bağlantısı olduğuna kandırdık ve yeterince iyi çalıştı; günlerce oynadık. Sonra biraz sıkılıp modding sahnesine daldım; kendim yapmadım, yayımlananları indirip denedim. Girobot ve KQP’yi (Killer Quake Patch) asla unutmam
Girobot botları araziye takılıp kalmadıkları sürece epey güçlüydü. Asıl altın madeni KQP’ydi; her türden çılgın mod, silah ve bot sistemi ekliyordu. Vampire Gun, vurduğu oyuncunun yavaş yavaş ama çok da yavaş olmayacak şekilde et parçalarına ayrılarak ölmesine neden olurdu; her seferinde gülmekten kırılırdım. 90’ları gerçekten özlüyorum
Bu arada KQP’de ZeusBots da vardı diye biliyorum
[1] https://github.com/Jason2Brownlee/QuakeBotArchive
Başka yerlerde yeniden yayımlanan sürümün Linux versiyonu yok diye sızlanıldığını gördüm; ama kaynak kodu böyle açmışlar ve clang ile test edildiği yazıyor. İlkelerine bağlı kaldığı için id’ye kocaman alkış
Eski kodun da mülkiyeti onlarda olmalıydı, bu yüzden yasal bir yükümlülük olmadığını düşünüyorum
Artık satılmayan ve modern yazılım/donanım stack’lerinde çalışmayan çok fazla oyun var
Yazılımlar için, 20 yıl boyunca yeni platformlarda çalışmasını sağlayacak yamalar yayımlamadıysanız, kültürel önem açısından open source olarak yayımlamanızı gerektiren bir yasa olsa keşke
Bu kaynakta olduğu gibi C/C++’ta tip soneki olarak _t kullanılması hakkında ne düşündüğünüzü merak ediyorum
Benim anladığım kadarıyla dilin tanımladığı tipler için ayrılmış, ama makul bir alternatif de görmedim. Sonek olmayınca kod tuhaflaşabiliyor. Örneğin “viewport” için özel bir tipte
viewport viewport;yerineviewport_t viewport;bana daha iyi geliyorGenelde itiraz edecek kadar önemli değil, stil rehberi ne istiyorsa tip adlarını ona göre veriyorum.
töneki daha kötü;typedefkelimesinin tamamını eklemek ise daha da kötü_tsonekini ayıran C değil POSIXYine de id Tech kod tabanlarıyla uğraşırken
_s/_talışkanlığı edindim ve C kod tabanlarımın sonsuza dek “POSIX uyumsuz” damgası yemesini sorun etmemeye karar verdim. Bu pratikte ne anlama geliyorsa artık. C++’ta ise sadece InitialCamelCase kullanıyorumunder_scoreskullanıyorum.Viewport viewport;gibi biçimler ortaya çıkıyor, ama en azındanViewport’un bir tip olduğu kolayca anlaşılıyor_typekullanılmasını şart koşuyorİlginç biçimde, özel bir OS kullanan gömülü ürünün devasa kod tabanı sabit genişlikli tamsayı tipleri için
uint32_tgibi tipler kullanmıyor. Bunun yerine şirketin ortak header’ı_tsoneki olmadanuint32vb. tanımlıyor. Neden böyle karar verildiğini bilmiyorumBüyüme çağımda bu oyun benim için her şeydi. Klanları, ladder’ları ve gerçek online oyun kültürünü bana ilk kez o tanıttı
Benim haritam The Edge’di; silahım da railgun ya da rocket launcher’dı. O zamanlar çevirmeli bağlantı vardı, bu yüzden gecikmesi iyi olan bir sunucu bulmak önemliydi. En sinir bozucu şey, herkese lag yaşatan o silahı kullanan insanlardı
Q3’ün türü tamamına erdiren daha büyük oyun olduğunu biliyorum ama benim favorim her zaman Quake 2 olacak. Sağlam bir tek oyunculu modu ve genişleme paketleri de vardı; temposu da bana tam uygundu. Q3 çıkınca her şey fazla hızlandı
VQL, Q2’ye çok daha yakın; PQL ise CPMA veya QuakeWorld’e daha yakın. Bonus olarak The Edge de Quake Live’da oynanabiliyor
Quake 2 hayranıysan ve Oculus Quest 2 kullanabiliyorsan Quake2Quest’i denemeni öneririm. Eskiden çok uzun zaman geçirdiğin haritalarda bizzat koşup dolaşıyormuş hissi gerçekten çok farklı