2 puan yazan GN⁺ 2023-08-11 | 1 yorum | WhatsApp'ta paylaş
  • 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 mymod kullanılabilir veya çalışma sırasında konsolda game mymod girilebilir
  • Özgün oyun dosyalarını değiştirmekten kaçınmak için modların %USERPROFILE%\Saved Games\Nightdive Studios\Quake II dizinine 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 cgame modülüne benzer ince bir istemci oyun modülü sunar
  • Kod tabanı, özgün oyunun baseq2, ctf, rogue, xatrix oyun 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 fmtlib bağımlılığı atlanabilir
  • Bağımlılıklar fmtlib ve jsoncpp'dir; vcpkg install jsoncpp:x64-windows fmt:x64-windows ile kurulabilir
  • Yeniden sürüm DLL'i, özgün ek paket haritalarını doğru yükleyemeyebilir; bunun nedeni, çakışan spawnflags sorununu çö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

 
GN⁺ 2023-08-11
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.

    • id'nin kodu kesinlikle temiz ve iyi yapılandırılmış, ama sıradan biri için anlaması epey zordu.
      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.
    • Ben de böyle kod yazma suçunu işledim.
      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ı.
    • id kodunu seviyorsanız John Carmack on Inlined Code (2014) da hoşunuza gidebilir: https://news.ycombinator.com/item?id=12120752
    • id Software kaynak kodunu ayrıntılı incelemiş değilim ama gerçekten korkunç oyun kaynak kodu çok gördüm. Taban çizgisi aşırı düşük.
      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.
    • Bu derslerin çıktılarından ekran görüntüleri paylaşabilirsen harika olur. Gerçekten çok güzel görünüyor.
  • Ş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üş.

    • Potansiyel alıcı mı geliyor? O zaman F40'ı tesadüfen girişin hemen yanına park etmek yeterli.
  • 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.

    • Eğer bilmiyorsanız, bu Quake II'nin yeniden yayımlanan sürümünün kaynak kodu. Orijinal Quake II kaynak kodu yıllardır açıktı[0] ve id Software'in pek çok klasiği de onunla birlikte açık durumda[1].
      [0]: https://github.com/id-Software/Quake-2
      [1]: https://github.com/id-Software
    • Birden fazla kişinin LAN üzerinde FPS oynadığını ilk gördüğüm zamanı hatırlattı.
      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ı

    • Sonsuz dosya yığınları arasından modumun binary’sini buldum
      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
    • Tribes 2 benim ilk modding deneyimimdi ve o oyun da gönlümde çok özel bir yere sahip. Sonrasında Ultima Online emülatörleri Sphere ve RunUO beni oyunculuktan programcılığa taşıdı
    • Açılır konsolu keşfetmek vahiy gibi gelmişti
      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

    • “Girobot” derken “Gyro Gearloose”un Gyrobot’unu[1] mu kastediyorsun?
      Bu arada KQP’de ZeusBots da vardı diye biliyorum
      [1] https://github.com/Jason2Brownlee/QuakeBotArchive
    • Modemle, bazen de T1 üzerinden indirdiğim Quake 2 çok oyunculu modları, haritaları ve skin’leri 8GB tutuyordu. O modları gerçekten özlüyorum
    • Babanın eski paralel kablosu derken, null modemle mi bağladınız? Üniversitedeki ev arkadaşım ile apartmanda aynı kurulumu kullanmıştık. 90’ların ortasıydı; Doom 2 ve o dönemin FPS’lerini oynardık, güzel anılar
  • 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ış

    • Bu kaynak kodunu neden yayımladıklarını merak ediyorum. Sırf ilke meselesi mi, yoksa eski kod da GPL olduğu için yasal bir yükümlülük mü vardı, bilmiyorum
      Eski kodun da mülkiyeti onlarda olmalıydı, bu yüzden yasal bir yükümlülük olmadığını düşünüyorum
    • Bu sürüm tüm büyük platformlarda çıktı ve günümüzde hem Nintendo’nun hem Sony’nin SDK toolchain’lerinde Clang/LLVM kullandığından oldukça eminim. Linux da akıllarında olmuş olabilir ama ana motivasyonun modern konsollarda build edilebilir hale getirmek olduğunu sanıyorum
    • Bu yalnızca oyun kodu gibi görünüyor, engine kaynak kodu değil; bir şeyi mi kaçırı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; yerine viewport_t viewport; bana daha iyi geliyor

    • Bildiğim kadarıyla bu C dilinin kendisinden çok POSIX tarafındaki bir kural. Yine de kişisel kodumda kullanıyorum; fakat çalıştığım kodlama standartlarında POSIX dışı ortamlarda bile sık sık yasaklandı
      Genelde itiraz edecek kadar önemli değil, stil rehberi ne istiyorsa tip adlarını ona göre veriyorum. t öneki daha kötü; typedef kelimesinin tamamını eklemek ise daha da kötü
    • Benim anladığım kadarıyla _t sonekini ayıran C değil POSIX
      Yine de id Tech kod tabanlarıyla uğraşırken _s/_t alış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ıyorum
    • Herkesin zevkine uymayabilir ama ben tiplerde CamelCase, değişkenlerde ise under_scores kullanıyorum. Viewport viewport; gibi biçimler ortaya çıkıyor, ama en azından Viewport’un bir tip olduğu kolayca anlaşılıyor
    • IDE pek yardımcı olmadığında, yalnızca gözünüzün önündeki koda bakarak neyin ne olduğunu anlamanız gerekiyorsa işe yarıyor
    • Çalıştığım yerdeki C stil rehberi _type kullanı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_t gibi tipler kullanmıyor. Bunun yerine şirketin ortak header’ı _t soneki olmadan uint32 vb. tanımlıyor. Neden böyle karar verildiğini bilmiyorum
  • Bü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 fiziği kullanan Quake Live sunucuları hoşuna gidebilir
      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
    • Railgun ile vur, machine gun ile işi bitir, gg
  • 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ı