QuakeC - QuakeC

QuakeC
paradigma zorunlu ( prosedürel ), yapılandırılmış
Tarafından tasarlandı John Carmack
geliştirici kimlik Yazılımı
İlk ortaya çıktı 1996
Yazma disiplini statik , güçlü
Başlıca uygulamalar
Quake C Derleyicisi, FastQCC, FTEQCC, QCCx, GMQCC
Tarafından etkilenmiş
C

QuakeC bir olduğunu derlenmiş dil tarafından 1996 yılında geliştirilen John Carmack ait id Software programı bölümlerine video oyun Quake . Bir programcı QuakeC kullanarak, silahlar ekleyerek, oyun mantığını ve fiziğini değiştirerek ve karmaşık senaryolar programlayarak Quake'i büyük ölçüde özelleştirebilir . AI'nın bölümleri, tetikleyiciler veya seviyedeki değişiklikler gibi oyunun birçok yönünü kontrol etmek için kullanılabilir. Quake motoru QuakeC kullanan tek oyun motoru oldu. Aşağıdaki motorlar , özelleştirme için C ile yazılmış DLL oyun modüllerini ve id Tech 4'ten itibaren C++ kullandı .

genel bakış

Orijinal id Software Quake oyun mantığının QuakeC kaynağı 1996'da yayınlandı ve bayrağı ele geçirme ve diğerleri gibi değişiklikler için temel olarak kullanıldı . QuakeC kaynak kodu, qcc adlı bir araç kullanılarak progs.dat adlı bir dosyada tutulan bir bayt koduna derlenir . Quake modifikasyonlarının programcıları daha sonra progs.dat bayt kodlarını kaynak kodlarını açıklamadan yayınlayabilirler . Çoğu Quake modu bu şekilde yayınlandı.

QuakeC, Quake motorunun birinci şahıs nişancı türünün yönüne hakim olmasına izin verdi . Sınırsız genişletilebilirlik ekleyerek video oyun ömrünü uzatmanın Carmack'in fikri sayesinde (genişletilebilirlik zaten büyük bir rol oynamıştır Doom oyuncular ve programcıların muazzam bir internet topluluğu hem doğmuştur ve birçok modern çok oyunculu oyunları çeşit uzayabilen,).

QuakeC yorumlandı olarak bilinir çünkü Quake çalışırken sürekli olarak progs.dat dosyasını yorumlar.

Sınırlamalar ve sonraki çözümler

Sözdizimi QuakeC ait o dayanmaktadır C programlama dili adını açıklayan, ancak yeni türleri, yapıları, diziler uygulanmasını, ya da her zaman bir olan "varlık" türü dışındaki başvuran her türlü (desteklemez referans). QuakeC ayrıca birçok yerleşik işlevin (QuakeC kodunda prototipi oluşturulmuş ancak aslında oyun motorunda tanımlanmış ve C ile yazılmış işlevler) herhangi bir zamanda yalnızca bir dize tutabilen geçici bir dize arabelleğinde dizeler döndürmesinden de muzdariptir. Başka bir deyişle, aşağıdaki gibi bir yapı

SomeFunction (ftos (num1), ftos (num2));

başarısız olur, çünkü ftos(kayan nokta değerini bir dizgeye dönüştüren) ikinci çağrı, SomeFunction onunla bir şey yapmadan önce ilk çağrı tarafından döndürülen dizgenin üzerine yazar. QuakeC, orijinal oyunun ihtiyaç duymadığı herhangi bir dizi işleme işlevi veya dosya işleme işlevi içermez.

O sırada çoğu video oyununun oyun mantığı düz C/C++ ile yazılmış ve daha hızlı olan yürütülebilir dosyada derlenmiştir . Ancak bu, topluluğun mod oluşturmasını zorlaştırır ve oyunu başka bir platforma ( Linux gibi ) taşıma sürecini daha maliyetli hale getirir .

Avantajlarına rağmen, özel bir betik dili ve yorumlayıcısı kullanarak oyun mantığını uygulama seçimi, QuakeC'nin genel olarak esnek olmaması, giderek daha karmaşık hale gelen oyun mantığı ve performansı nedeniyle yeni nesil Quake II motorundan derlenmiş C kodu lehine çıkarıldı. oyun mantığının yerel bir dinamik bağlantı kitaplığına paketlenmesiyle ve halihazırda kurulmuş bir programlama dilinin topluluğundan, araçlarından, eğitim materyallerinden ve belgelerinden yararlanma avantajından elde edilir.

Yerel kodun dağıtılması, yeni güvenlik ve taşınabilirlik endişeleri yarattı. QuakeC bayt kodu, yaramazlık için çok az fırsat sunarken, yerel kodun tüm makineye erişimi vardı. QuakeC bayt kodu, Quake'i çalıştırabilen herhangi bir makinede de çalıştı. Yerel kodu derlemek, acemi mod geliştiricileri için girişe ek bir engel ekledi, çünkü daha karmaşık bir programlama ortamı kurmaları isteniyordu . Quake III motoru tarafından uygulanan nihai çözüm, orijinal QuakeC'nin avantajlarını C'yi yerel kodda derlemenin avantajlarıyla birleştirmek oldu. Lcc C derleyicisi bir tarafından yorumlanabilir bayt içine, standart C derlemek için genişletildi sanal makine QuakeC benzer bir şekilde. Bu, güvenlik, taşınabilirlik ve araç zinciri sorunlarını ele aldı, ancak yerel kodun performans avantajını kaybetti. Bu, desteklenen makinelerde çalışma zamanında bayt kodunu yerel kodda daha fazla derleyerek çözüldü.

Değiştirilmiş derleyiciler ve dil uzantıları

Bir kod çözücü ve bir yeniden derleyici, Armin Rigo ( sırasıyla DEACCve REACColarak adlandırılır ) tarafından yayınlandı . Bu programlar tersine mühendislik süreciyle yapıldı ve büyük olasılıkla qcc.

id Softwareqcc , 1996'da orijinal QuakeC koduyla birlikte QuakeC derleyicilerinin kaynağını yayınladı. Jonathan Roy fastqccve Ryan "FrikaC" Smith'in FrikQCC'si de dahil olmak üzere kısa süre sonra değiştirilmiş sürümler ortaya çıktı . Bu ek işlevler, optimizasyonlar ve derleme hızı artışları.

1999'da, id Software Quake'in motorundan gelen kodu GNU Genel Kamu Lisansı (GPL) altında yayınladığında, bayt kodu yorumlayıcısının çalışmaları incelendi ve JP Grossman's qccxve FrikQCC'nin yeni bir sürümü gibi yeni QuakeC derleyicileri yayınlandı . Bu derleyiciler, yeni keşfedilen özelliklerden geriye dönük uyumlu bir şekilde yararlandı, böylece bayt kodu hala değiştirilmemiş Quake motorları tarafından düzgün bir şekilde yorumlanabiliyordu. Yeni özellikler diziler, işaretçiler, tamsayılar, döngüler ve dize işlemeyi içerir.

İle Quake değiştirilmesi şimdi mümkün motor kaynak kodu, daha ileri özellikler şeklinde QuakeC eklenen yeni yerleşik işlevleri. QuakeC kodlayıcıları tarafından uzun süredir özlenen özellikler, QuakeC'nin artık dosya ve dizi işleme işlevlerine, genişletilmiş dize arabelleklerine, daha fazla matematik işlevine vb. sahip olmasıyla nihayet gerçeğe dönüştü. Ancak, bu değişikliklerden yararlanan programcılar, değiştirilmemiş Quake motoruyla geriye dönük uyumluluğunu kaybetti.

Xonotic, sürüm 0.7'den beri gmqcc derleyicisinikullanır.

İstemci Tarafı QuakeC

Bazı gelişmiş Quake motorları (özellikle Darkplaces ve FTEQW), Quake motorunun yalnızca istemci tarafında komut dosyası oluşturmaya izin veren normal QuakeC'nin (artık yaygın olarak Sunucu Tarafı QuakeC olarak anılır) bir uzantısını destekler. Bu, özellikle GUI'ler, HUD'lar ve sunucuda simüle edilmesi ve ağ üzerinden aktarılması gerekmeyen görsel olarak ağır efektler için kullanışlıdır.

Ayrıca bakınız

Referanslar

Dış bağlantılar