Risorse per lo studio del motore di Quake 3 [chiuso]


14

Ci sono buone risorse (manuali, tutorial, ecc.) Per iniziare a studiare il codice del motore Quake 3 oltre il codice stesso?

Sono molto interessato a sapere come è strutturato a scopi educativi e forse a fare alcune modifiche.

Risposte:


13

Quindi, dovresti iniziare guardando l'articolo di Wikipedia su id Tech 3 . Ciò può essere aumentato dal sommario di GDC di Brian Hook e da alcune vecchie cose sul blog di Element 61 . Inoltre, dovrai cercare tra i vari tutorial di mod che puoi trovare per provare a ricostruire ciò che sta succedendo.

Suggerirei di partire dalla versione di origine originale da id, anziché ioquake3 o what-have-you, al fine di vedere davvero il contesto di ciò che sta succedendo (come l'input viene gestito e diretto all'interno del motore, che tipo di evento sottostante struttura utilizzata, ecc.).

Alcuni punti chiave che mi hanno aiutato quando ci lavoravo:

  • C'è sempre un server; potrebbe esserci anche la logica del client sopra la gestione di un frame.
  • L'input viene prima indirizzato a una console, se interessata, quindi alla GUI, quindi al gioco corretto.
  • Il motore stesso è separato (difficile!) Dalla logica di gioco, usando le funzioni trap. Cerca (se la memoria serve) cgame e visualizza i progetti per trovare il codice motore effettivo.
  • La logica di gioco può essere interamente scritta per essere eseguita nella macchina virtuale Quake 3. Quando si modifica e si utilizzano le DLL native, è necessario eseguire il gioco come quake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0per consentire al motore di eseguire il codice nativo anziché il codice VM.
  • L'interfaccia utente per il sistema di menu è una pila strana, malvagia e contorta di strutture e callback. È utilizzabile una volta risolto il problema, ma ciò può richiedere alcuni tentativi ed errori. Ricorda, è uno stack.
  • Se stai scrivendo codice in DLL nativi, sentiti libero di allocare memoria, scrivere in C ++ o quant'altro fa galleggiare la tua barca. Puoi anche usare l'STL - non c'è motivo di seguire rigidamente gli idiomi C tranne nel caso in cui tu ti interfaccia direttamente con il motore.

Alcune cose pulite che ho realizzato per questo con un collega:

  • Semplice interfaccia da riga di comando per richiamare i comandi della shell dalla console e scaricare nuovamente gli stream stdout / stderr sulla console (console Quake).
  • Interfaccia con un database SQL per estrarre e visualizzare i record.
  • Toolkit di finestre e widget flessibili per rendere flessibili le visualizzazioni sull'hud client (utilizzando grafici a barre, caselle di testo, caselle di immagine, menu di scelta rapida, finestre ridimensionabili, ecc.).
  • Razzi lenti :)

Personalmente, ho scoperto che il motore era una grande combinazione di cose davvero intelligenti fatte in modi davvero stupidi, cose davvero stupide fatte in modi davvero intelligenti e cose davvero intelligenti fatte in modi davvero intelligenti. È un ottimo esempio di come avere modularità e un buon design strutturato in un progetto C di media scala.

Infine, non stare male se ci vuole un po 'di tempo per grok. Mi ci è voluto forse un mese per essere davvero in grado di sapere dove trovare quello che stavo cercando nel motore; se tutto il resto fallisce, inizia dall'init dell'applicazione e scorri le funzioni, lasciando commenti per te come indicazioni. Il mio monitor è finito coperto di post-it rosa con nomi di funzioni, numeri di riga e brevi descrizioni di ciò che hanno fatto.



1

Assolutamente.

http://en.wikipedia.org/wiki/Quake_engine è una buona panoramica di ciò che è là fuori, ma puoi entrare nei dettagli della sua architettura abbastanza rapidamente attraverso le sue citazioni.

Vorrei anche suggerire un paio di libri sull'architettura del motore di gioco che potrebbero essere più in linea con ciò che stai cercando. Sebbene non specifici di Quake, entrano nei dettagli della progettazione del motore e corrono paralleli a molti aspetti dei motori Quake:

  • Architettura del motore di gioco 3D - 978-0122290640
  • Programmazione del motore di gioco 3D - 978-1592003518

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.