Sumber daya untuk membantu mempelajari mesin Quake 3 [ditutup]


14

Apakah ada sumber daya yang baik (manual, tutorial, dll) untuk mulai mempelajari kode mesin Quake 3 di luar kode itu sendiri?

Saya sangat tertarik mengetahui bagaimana ini disusun untuk tujuan pendidikan dan mungkin untuk melakukan beberapa modifikasi.

Jawaban:


13

Jadi, Anda harus mulai dengan melihat artikel Wikipedia di id Tech 3 . Itu dapat ditambah dengan ringkasan pembicaraan Brian Hook dari GDC dan beberapa hal lama di blog Element 61 . Selain itu, Anda harus melihat-lihat tutorial mod lama apa pun yang dapat Anda temukan untuk mencoba dan merekonstruksi apa yang terjadi.

Saya sarankan mulai dari rilis sumber asli dari id, alih-alih ioquake3 atau apa-apa, untuk benar-benar melihat konteks apa yang terjadi (bagaimana input ditangani dan diarahkan di dalam mesin, seperti apa kejadian yang mendasarinya struktur digunakan, dll.).

Beberapa poin penting yang membantu saya ketika saya sedang bekerja dengannya:

  • Selalu ada server; mungkin juga ada logika klien yang duduk di atas menangani sebuah bingkai.
  • Input diarahkan pertama ke konsol, jika tertarik, lalu ke GUI, lalu ke gim yang sesuai.
  • Mesinnya sendiri dipisahkan (keras!) Dari logika permainan, menggunakan fungsi perangkap. Lihat (jika ingatanku) proyek cgame dan render untuk menemukan kode mesin yang sebenarnya.
  • Logika game dapat sepenuhnya ditulis untuk dijalankan di mesin virtual Quake 3. Saat modding dan menggunakan dll asli, Anda harus menjalankan gim seperti quake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0untuk memungkinkan mesin untuk menjalankan kode asli bukan kode VM.
  • UI untuk sistem menu adalah tumpukan struktur dan panggilan balik yang aneh, jahat, bengkok. Ini dapat digunakan setelah Anda memecahkannya, tetapi itu dapat mengambil beberapa trial and error. Ingat, ini tumpukan.
  • Jika Anda menulis kode dalam .dlls asli, jangan ragu untuk mengalokasikan memori, menulis dalam C ++, atau apa pun yang mengapung perahu Anda. Anda dapat menggunakan STL juga - tidak ada alasan untuk secara kaku mengikuti idiom C kecuali di mana Anda langsung berinteraksi dengan mesin.

Beberapa hal rapi yang saya buat untuk itu dengan seorang rekan kerja:

  • Antarmuka baris perintah sederhana untuk memanggil perintah shell dari konsol dan membuang aliran stdout / stderr kembali ke konsol (konsol Gempa).
  • Interface dengan database SQL untuk menarik dan menampilkan catatan.
  • Jendela fleksibel dan toolkit widget untuk membuat tampilan fleksibel pada hud klien (menggunakan diagram batang, kotak teks, kotak gambar, menu konteks, jendela yang dapat diubah ukurannya, dll.)
  • Roket lambat. :)

Secara pribadi, saya menemukan bahwa mesin itu adalah kombinasi yang hebat dari hal-hal yang benar-benar cerdas yang dilakukan dengan cara yang benar-benar bodoh, hal-hal yang benar-benar bodoh dilakukan dengan cara yang sangat cerdas, dan hal-hal yang sangat cerdas dilakukan dengan cara yang sangat cerdas. Ini adalah contoh yang bagus tentang bagaimana memiliki modularitas dan desain terstruktur yang baik dalam proyek C skala menengah.

Terakhir, jangan merasa buruk jika perlu waktu untuk melakukan grok. Butuh waktu sebulan mungkin untuk benar-benar dapat mengetahui di mana menemukan apa yang saya cari di mesin; jika semuanya gagal, mulailah dari init aplikasi dan langsung turun ke fungsi, meninggalkan komentar untuk diri sendiri sebagai rambu-rambu. Monitor saya pada akhirnya tercakup dalam catatan post-it pink dengan nama fungsi, nomor baris, dan deskripsi singkat tentang apa yang mereka lakukan.



1

Benar.

http://en.wikipedia.org/wiki/Quake_engine adalah ikhtisar yang baik tentang apa yang ada di luar sana, tetapi Anda dapat masuk ke detail arsitekturnya cukup cepat melalui kutipannya.

Boleh saya juga menyarankan beberapa buku tentang arsitektur mesin game yang mungkin lebih sesuai dengan apa yang Anda cari. Meskipun tidak spesifik tentang Gempa, mereka masuk ke detail desain mesin dan berjalan paralel dengan banyak aspek dari mesin Gempa:

  • Arsitektur Mesin Game 3D - 978-0122290640
  • Pemrograman Mesin Game 3D - 978-1592003518

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.